本文整理汇总了C++中THRenderTarget类的典型用法代码示例。如果您正苦于以下问题:C++ THRenderTarget类的具体用法?C++ THRenderTarget怎么用?C++ THRenderTarget使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了THRenderTarget类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: l_font_draw_tooltip
static int l_font_draw_tooltip(lua_State *L)
{
THFont* pFont = luaT_testuserdata<THFont>(L);
THRenderTarget* pCanvas = luaT_testuserdata<THRenderTarget>(L, 2);
size_t iMsgLen;
const char* sMsg = luaT_checkstring(L, 3, &iMsgLen);
int iX = static_cast<int>(luaL_checkinteger(L, 4));
int iY = static_cast<int>(luaL_checkinteger(L, 5));
int iScreenWidth = pCanvas->getWidth();
int iW = 200; // (for now) hardcoded width of tooltips
uint32_t iBlack = pCanvas->mapColour(0x00, 0x00, 0x00);
uint32_t iWhite = pCanvas->mapColour(0xFF, 0xFF, 0xFF);
THFontDrawArea oArea = pFont->drawTextWrapped(nullptr, sMsg, iMsgLen, iX + 2, iY + 1, iW - 4, INT_MAX, 0);
int iLastX = iX + oArea.iWidth + 3;
int iFirstY = iY - (oArea.iEndY - iY) - 1;
int iXOffset = iLastX > iScreenWidth ? iScreenWidth - iLastX : 0;
int iYOffset = iFirstY < 0 ? -iFirstY : 0;
pCanvas->fillRect(iBlack, iX + iXOffset, iFirstY + iYOffset, oArea.iWidth + 3, oArea.iEndY - iY + 2);
pCanvas->fillRect(iWhite, iX + iXOffset + 1, iFirstY + 1 + iYOffset, oArea.iWidth + 1, oArea.iEndY - iY);
pFont->drawTextWrapped(pCanvas, sMsg, iMsgLen, iX + 2 + iXOffset, iFirstY + 1 + iYOffset, iW - 4);
lua_pushinteger(L, oArea.iEndY);
return 1;
}
示例2: l_surface_destroy
static int l_surface_destroy(lua_State *L)
{
THRenderTarget* pCanvas = luaT_testuserdata<THRenderTarget>(L);
pCanvas->endFrame();
pCanvas->destroy();
return 1;
}
示例3: l_surface_set_caption
static int l_surface_set_caption(lua_State *L)
{
THRenderTarget* pCanvas = luaT_testuserdata<THRenderTarget>(L);
pCanvas->setCaption(luaL_checkstring(L, 2));
lua_settop(L, 1);
return 1;
}
示例4: l_surface_map
static int l_surface_map(lua_State *L)
{
THRenderTarget* pCanvas = luaT_testuserdata<THRenderTarget>(L);
lua_pushnumber(L, (lua_Number)pCanvas->mapColour(
(Uint8)luaL_checkinteger(L, 2),
(Uint8)luaL_checkinteger(L, 3),
(Uint8)luaL_checkinteger(L, 4)));
return 1;
}
示例5: l_surface_nonoverlapping
static int l_surface_nonoverlapping(lua_State *L)
{
THRenderTarget* pCanvas = luaT_testuserdata<THRenderTarget>(L);
if(lua_isnone(L, 2) || lua_toboolean(L, 2) != 0)
pCanvas->startNonOverlapping();
else
pCanvas->finishNonOverlapping();
lua_settop(L, 1);
return 1;
}
示例6: l_surface_end_frame
static int l_surface_end_frame(lua_State *L)
{
THRenderTarget* pCanvas = luaT_testuserdata<THRenderTarget>(L);
lua_settop(L, 1);
if(pCanvas->endFrame())
return 1;
lua_pushnil(L);
lua_pushstring(L, pCanvas->getLastError());
return 2;
}
示例7: l_surface_get_clip
static int l_surface_get_clip(lua_State *L)
{
THRenderTarget* pCanvas = luaT_testuserdata<THRenderTarget>(L);
THClipRect rcClip;
pCanvas->getClipRect(&rcClip);
lua_pushinteger(L, rcClip.x);
lua_pushinteger(L, rcClip.y);
lua_pushinteger(L, rcClip.w);
lua_pushinteger(L, rcClip.h);
return 4;
}
示例8: l_surface_screenshot
static int l_surface_screenshot(lua_State *L)
{
THRenderTarget* pCanvas = luaT_testuserdata<THRenderTarget>(L);
const char *sFile = luaL_checkstring(L, 2);
if(pCanvas->takeScreenshot(sFile))
{
lua_settop(L, 1);
return 1;
}
lua_pushnil(L);
lua_pushstring(L, pCanvas->getLastError());
return 2;
}
示例9: l_surface_update
static int l_surface_update(lua_State *L)
{
THRenderTarget* pCanvas = luaT_testuserdata<THRenderTarget>(L);
THRenderTargetCreationParams oParams = l_surface_creation_params(L, 2);
if(pCanvas->update(&oParams))
{
lua_pushnil(L);
return 1;
}
lua_pushstring(L, pCanvas->getLastError());
return 1;
}
示例10: l_surface_new
static int l_surface_new(lua_State *L)
{
lua_remove(L, 1); // Value inserted by __call
THRenderTargetCreationParams oParams = l_surface_creation_params(L, 1);
THRenderTarget* pCanvas = luaT_stdnew<THRenderTarget>(L);
if(pCanvas->create(&oParams))
return 1;
lua_pushnil(L);
lua_pushstring(L, pCanvas->getLastError());
return 2;
}
示例11: l_surface_rect
static int l_surface_rect(lua_State *L)
{
THRenderTarget* pCanvas = luaT_testuserdata<THRenderTarget>(L);
if(pCanvas->fillRect(static_cast<uint32_t>(luaL_checkinteger(L, 2)),
static_cast<int>(luaL_checkinteger(L, 3)), static_cast<int>(luaL_checkinteger(L, 4)), static_cast<int>(luaL_checkinteger(L, 5)),
static_cast<int>(luaL_checkinteger(L, 6))))
{
lua_settop(L, 1);
return 1;
}
lua_pushnil(L);
lua_pushstring(L, pCanvas->getLastError());
return 2;
}
示例12: l_surface_set_clip
static int l_surface_set_clip(lua_State *L)
{
THRenderTarget* pCanvas = luaT_testuserdata<THRenderTarget>(L);
THClipRect rcClip;
rcClip.x = static_cast<THClipRect::xy_t>(luaL_checkinteger(L, 2));
rcClip.y = static_cast<THClipRect::xy_t>(luaL_checkinteger(L, 3));
rcClip.w = static_cast<THClipRect::wh_t>(luaL_checkinteger(L, 4));
rcClip.h = static_cast<THClipRect::wh_t>(luaL_checkinteger(L, 5));
if(lua_toboolean(L, 6) != 0)
{
THClipRect rcExistingClip;
pCanvas->getClipRect(&rcExistingClip);
IntersectTHClipRect(rcClip, rcExistingClip);
}
pCanvas->setClipRect(&rcClip);
lua_settop(L, 1);
return 1;
}
示例13: l_surface_scale
static int l_surface_scale(lua_State *L)
{
THRenderTarget* pCanvas = luaT_testuserdata<THRenderTarget>(L);
THScaledItems eToScale = THSI_None;
if(lua_isnoneornil(L, 3))
{
eToScale = THSI_All;
}
else
{
size_t iLength;
const char* sOption = lua_tolstring(L, 3, &iLength);
if(sOption && iLength >= 6 && std::memcmp(sOption, "bitmap", 6) == 0)
{
eToScale = THSI_Bitmaps;
}
else
luaL_error(L, "Expected \"bitmap\" as 2nd argument");
}
lua_pushboolean(L, pCanvas->setScaleFactor(static_cast<float>(
luaL_checknumber(L, 2)), eToScale) ? 1 : 0);
return 1;
}
示例14: l_surface_new
static int l_surface_new(lua_State *L)
{
lua_remove(L, 1); // Value inserted by __call
THRenderTargetCreationParams oParams;
oParams.iWidth = luaL_checkint(L, 1);
oParams.iHeight = luaL_checkint(L, 2);
int iArg = 3;
if(lua_type(L, iArg) == LUA_TNUMBER)
oParams.iBPP = luaL_checkint(L, iArg++);
else
oParams.iBPP = 0;
oParams.iSDLFlags = 0;
oParams.bHardware = false;
oParams.bDoubleBuffered = false;
oParams.bFullscreen = false;
oParams.bPresentImmediate = false;
oParams.bReuseContext = false;
oParams.bOpenGL = false;
#define FLAG(name, field, flag) \
else if(stricmp(sOption, name) == 0) \
oParams.field = true, oParams.iSDLFlags |= flag
for(int iArgCount = lua_gettop(L); iArg <= iArgCount; ++iArg)
{
const char* sOption = luaL_checkstring(L, iArg);
if(sOption[0] == 0)
continue;
FLAG("hardware" , bHardware , SDL_HWSURFACE );
FLAG("doublebuf" , bDoubleBuffered , SDL_DOUBLEBUF );
FLAG("fullscreen" , bFullscreen , SDL_FULLSCREEN);
FLAG("present immediate", bPresentImmediate, 0 );
FLAG("reuse context" , bReuseContext , 0 );
FLAG("opengl" , bOpenGL , SDL_OPENGL );
}
#undef FLAG
#ifndef CORSIX_TH_USE_DX9_RENDERER
if(SDL_WasInit(SDL_INIT_VIDEO))
{
char *sTitle, *sIcon;
char *sTitle2 = NULL, *sIcon2 = NULL;
size_t iLen;
SDL_WM_GetCaption(&sTitle, &sIcon);
if(sTitle)
{
iLen = strlen(sTitle) + 1;
sTitle2 = (char*)malloc(iLen);
memcpy(sTitle2, sTitle, iLen);
}
if(sIcon)
{
iLen = strlen(sIcon) + 1;
sIcon2 = (char*)malloc(iLen);
memcpy(sIcon2, sIcon, iLen);
}
SDL_QuitSubSystem(SDL_INIT_VIDEO);
SDL_InitSubSystem(SDL_INIT_VIDEO);
SDL_WM_SetCaption(sTitle2, sIcon2);
free(sTitle2);
free(sIcon2);
}
#endif
THRenderTarget* pCanvas = luaT_stdnew<THRenderTarget>(L);
if(pCanvas->create(&oParams))
return 1;
lua_pushnil(L);
lua_pushstring(L, pCanvas->getLastError());
return 2;
}
示例15: l_town_map_draw
static int l_town_map_draw(lua_State *L)
{
luaL_checktype(L, 1, LUA_TTABLE);
THMap *pMap = luaT_testuserdata<THMap>(L, 2);
THRenderTarget *pCanvas = luaT_testuserdata<THRenderTarget>(L, 3);
int iCanvasXBase = luaL_checkint(L, 4);
int iCanvasYBase = luaL_checkint(L, 5);
bool bShowHeat = lua_toboolean(L, 6) != 0;
uint32_t iColourMyHosp = pCanvas->mapColour(0, 0, 70);
uint32_t iColourWall = pCanvas->mapColour(255, 255, 255);
uint32_t iColourDoor = pCanvas->mapColour(200, 200, 200);
uint32_t iColourPurchasable = pCanvas->mapColour(255, 0, 0);
const THMapNode *pNode = pMap->getNodeUnchecked(0, 0);
const THMapNode *pOriginalNode = pMap->getOriginalNodeUnchecked(0, 0);
int iCanvasY = iCanvasYBase + 3;
for(int iY = 0; iY < pMap->getHeight(); ++iY, iCanvasY += 3)
{
int iCanvasX = iCanvasXBase;
for(int iX = 0; iX < pMap->getWidth(); ++iX, ++pNode, ++pOriginalNode, iCanvasX += 3)
{
if(pOriginalNode->iFlags & THMN_Hospital)
{
uint32_t iColour = iColourMyHosp;
if(!(pNode->iFlags & THMN_Hospital))
{
// TODO: Replace 1 with player number
if(pMap->isParcelPurchasable(pNode->iParcelId, 1))
iColour = iColourPurchasable;
else
goto dont_paint_tile;
}
else if(bShowHeat)
{
uint16_t iTemp = pMap->getNodeTemperature(pNode);
if(iTemp < 5200) // Less than 4 degrees
iTemp = 0;
else if(iTemp > 32767) // More than 25 degrees
iTemp = 255;
else // NB: 108 == (32767 - 5200) / 255
iTemp = (iTemp - 5200) / 108;
iColour = pCanvas->mapColour(static_cast<uint8_t>(iTemp), 0, 70);
}
pCanvas->fillRect(iColour, iCanvasX, iCanvasY, 3, 3);
}
dont_paint_tile:
#define IsWall(blk) ((82 <= ((blk) & 0xFF)) && (((blk) & 0xFF) <= 164))
#define IsWallDrawn(n) pMap->getNodeOwner(pNode) != 0 ? \
IsWall(pNode->iBlock[n]) : IsWall(pOriginalNode->iBlock[n])
if(IsWallDrawn(1))
pCanvas->fillRect(iColourWall, iCanvasX, iCanvasY, 3, 1);
if(IsWallDrawn(2))
pCanvas->fillRect(iColourWall, iCanvasX, iCanvasY, 1, 3);
#undef IsWallDrawn
#undef IsWall
if(pNode->iFlags & THMN_DoorNorth)
pCanvas->fillRect(iColourDoor, iCanvasX, iCanvasY - 2, 2, 3);
if(pNode->iFlags & THMN_DoorWest)
pCanvas->fillRect(iColourDoor, iCanvasX - 3, iCanvasY, 3, 2);
}
}
return 0;
}