本文整理汇总了C++中Texture类的典型用法代码示例。如果您正苦于以下问题:C++ Texture类的具体用法?C++ Texture怎么用?C++ Texture使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Texture类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: drawRect
void NotPassableTerrain::HeihghtmapUpdated(const DAVA::Rect &forRect)
{
EditorLandscape::HeihghtmapUpdated(forRect);
AABBox3 boundingBox = nestedLandscape->GetBoundingBox();
Vector3 landSize = boundingBox.max - boundingBox.min;
float32 angleCellDistance = landSize.x / (float32)(heightmap->Size() - 1);
float32 angleHeightDelta = landSize.z / (float32)(Heightmap::MAX_VALUE - 1);
float32 tanCoef = angleHeightDelta / angleCellDistance;
Texture *notPassableMap = notPassableMapSprite->GetTexture();
float32 dx = (float32)notPassableMap->GetWidth() / (float32)(heightmap->Size() - 1);
RenderManager::Instance()->LockNonMain();
RenderManager::Instance()->SetRenderTarget(notPassableMapSprite);
Rect drawRect(forRect.x * dx, forRect.y * dx, (forRect.dx - 1)* dx, (forRect.dy - 1) * dx);
RenderManager::Instance()->ClipPush();
RenderManager::Instance()->ClipRect(drawRect);
DrawFullTiledTexture(notPassableMap, drawRect);
int32 lastY = (int32)(forRect.y + forRect.dy);
int32 lastX = (int32)(forRect.x + forRect.dx);
for (int32 y = (int32)forRect.y; y < lastY; ++y)
{
int32 yOffset = y * heightmap->Size();
for (int32 x = (int32)forRect.x; x < lastX; ++x)
{
uint16 currentPoint = heightmap->Data()[yOffset + x];
uint16 rightPoint = heightmap->Data()[yOffset + x + 1];
uint16 bottomPoint = heightmap->Data()[yOffset + x + heightmap->Size()];
uint16 deltaRight = (uint16)abs((int32)currentPoint - (int32)rightPoint);
uint16 deltaBottom = (uint16)abs((int32)currentPoint - (int32)bottomPoint);
float32 tanRight = (float32)deltaRight * tanCoef;
float32 tanBottom = (float32)deltaBottom * tanCoef;
float32 ydx = y * dx;
float32 xdx = x * dx;
RenderManager* renderManager = RenderManager::Instance();
RenderHelper* renderHelper = RenderHelper::Instance();
Color color;
if(PickColor(tanRight, color))
{
renderManager->SetColor(color);
renderHelper->DrawLine(Vector2(xdx, ydx), Vector2((xdx + dx), ydx));
}
if(PickColor(tanBottom, color))
{
renderManager->SetColor(color);
renderHelper->DrawLine(Vector2(xdx, ydx), Vector2(xdx, (ydx + dx)));
}
}
}
RenderManager::Instance()->ResetColor();
RenderManager::Instance()->ClipPop();
RenderManager::Instance()->RestoreRenderTarget();
RenderManager::Instance()->UnlockNonMain();
}
示例2: destroyTexture
//----------------------------------------------------------------------------//
void OgreRenderer::destroyTexture(Texture& texture)
{
destroyTexture(texture.getName());
}
示例3: glBindFramebuffer
void RenderTextureTarget::addColorAttachment(const Texture& texture)
{
glBindFramebuffer(GL_FRAMEBUFFER, m_framebuffer);
glFramebufferTexture(GL_FRAMEBUFFER, toGlFrameBufferAttachment(FrameBufferAttachment_Color) + m_colorAttachmentCount, texture._getGlTextureId(), 0);
++m_colorAttachmentCount;
std::vector<GLenum> buffers;
for (int i = 0; i < m_colorAttachmentCount; ++i)
{
buffers.push_back(GL_COLOR_ATTACHMENT0_EXT + i);
}
assert(!buffers.empty());
glDrawBuffers(m_colorAttachmentCount, &buffers[0]);
}
示例4: texture
void wgd::Font::bind() {
if (m_needsbuild) buildFont();
m_needsbuild = false;
Texture *tex = texture();
if (tex != 0) tex->bind();
}
示例5: Texture
void wgd::Font::buildFont() {
//Delete any existing font display lists
//if (m_base != 0xFFFFFFFF)
// destroyFont();
//Create new GL display lists for this font
//m_base = glGenLists(96);
Texture *tex;
//Make a texture for it
if (get(ix::texture) == Null) {
tex = new Texture();
tex->compress(false);
tex->nearest(true);
if (size() < 32) {
tex->width(256);
tex->height(256);
} else {
tex->width(512);
tex->height(512);
}
texture(tex);
//Processor::processAll();
tex->make(RGBA);
//Processor::processAll();
} else {
tex = texture();
if (!tex->isLoaded()) {
tex->compress(false);
tex->nearest(true);
if (size() < 32) {
tex->width(256);
tex->height(256);
} else {
tex->width(512);
tex->height(512);
}
tex->make(RGBA);
}
}
if (tex == 0) return;
#ifdef WIN32
HFONT font;
HFONT oldfont;
#ifdef UNICODE
int wLen = name().size() + 1;
wchar_t *wFont = new wchar_t[wLen];
mbstowcs(wFont, name(), wLen);
#else
char *wFont = strdup(name());
#endif
//Ask windows for a font
font = CreateFont( -size(),//Height
0, //Width
0, //Angle
0, //Orientation
(bold()) ? FW_BOLD : FW_REGULAR,//Weight
FALSE, //Italic
FALSE, //UNDERLINE
FALSE, //Strikeout
ANSI_CHARSET,
OUT_TT_PRECIS,
CLIP_DEFAULT_PRECIS,
ANTIALIASED_QUALITY,
FF_DONTCARE | DEFAULT_PITCH,
wFont); //Font name
HDC memDC = CreateCompatibleDC(wgd::window->getHDC());
//Select this new font and save the current one.
oldfont = (HFONT)SelectObject(memDC, font);
//Get windows to generate display lists for this font
//wglUseFontBitmaps(memDC, 32, 96, m_base);
HBITMAP bmp = CreateCompatibleBitmap(memDC, tex->width(),tex->height());
HBITMAP oldbmp = (HBITMAP)SelectObject(memDC, bmp);
char letter = '@';
int x = 0;
int y = 0;// size();
int w;
int h;
//GetCharWidth(memDC, letter, letter, &w);
TEXTMETRIC tmet;
GetTextMetrics(memDC, &tmet);
SetTextColor(memDC, 0x00FFFFFF);
SetBkColor(memDC, 0x00000000);
w = tmet.tmAveCharWidth;
h = tmet.tmHeight;
//width(w);
//height(h);
for (int i=32; i<128; i++) {
//if (i >= 65 && i <= 90)
//.........这里部分代码省略.........
示例6: KFL_UNUSED
void OGLESTexture3D::CopyToSubTexture3D(Texture& target,
uint32_t dst_array_index, uint32_t dst_level, uint32_t dst_x_offset, uint32_t dst_y_offset, uint32_t dst_z_offset, uint32_t dst_width, uint32_t dst_height, uint32_t dst_depth,
uint32_t src_array_index, uint32_t src_level, uint32_t src_x_offset, uint32_t src_y_offset, uint32_t src_z_offset, uint32_t src_width, uint32_t src_height, uint32_t src_depth)
{
KFL_UNUSED(dst_depth);
BOOST_ASSERT(type_ == target.Type());
BOOST_ASSERT(0 == src_array_index);
BOOST_ASSERT(0 == dst_array_index);
if ((src_width == dst_width) && (src_height == dst_height) && (src_depth == dst_depth) && (format_ == target.Format()))
{
if (IsCompressedFormat(format_))
{
BOOST_ASSERT((0 == (src_x_offset & 0x3)) && (0 == (src_y_offset & 0x3)));
BOOST_ASSERT((0 == (dst_x_offset & 0x3)) && (0 == (dst_y_offset & 0x3)));
BOOST_ASSERT((0 == (src_width & 0x3)) && (0 == (src_height & 0x3)));
BOOST_ASSERT((0 == (dst_width & 0x3)) && (0 == (dst_height & 0x3)));
for (uint32_t z = 0; z < src_depth; ++ z)
{
Texture::Mapper mapper_src(*this, src_array_index, src_level, TMA_Read_Only,
src_x_offset, src_y_offset, src_z_offset + z, src_width, src_height, 1);
Texture::Mapper mapper_dst(target, dst_array_index, dst_level, TMA_Write_Only,
dst_x_offset, dst_y_offset, dst_z_offset + z, dst_width, dst_height, 1);
uint32_t const block_size = NumFormatBytes(format_) * 4;
uint8_t const * s = mapper_src.Pointer<uint8_t>();
uint8_t* d = mapper_dst.Pointer<uint8_t>();
for (uint32_t y = 0; y < src_height; y += 4)
{
std::memcpy(d, s, src_width / 4 * block_size);
s += mapper_src.RowPitch();
d += mapper_dst.RowPitch();
}
}
}
else
{
for (uint32_t z = 0; z < src_depth; ++ z)
{
size_t const format_size = NumFormatBytes(format_);
Texture::Mapper mapper_src(*this, src_array_index, src_level, TMA_Read_Only,
src_x_offset, src_y_offset, src_z_offset + z, src_width, src_height, 1);
Texture::Mapper mapper_dst(target, dst_array_index, dst_level, TMA_Write_Only,
dst_x_offset, dst_y_offset, dst_z_offset + z, dst_width, dst_height, 1);
uint8_t const * s = mapper_src.Pointer<uint8_t>();
uint8_t* d = mapper_dst.Pointer<uint8_t>();
for (uint32_t y = 0; y < src_height; ++ y)
{
std::memcpy(d, s, src_width * format_size);
s += mapper_src.RowPitch();
d += mapper_dst.RowPitch();
}
}
}
}
else
{
this->ResizeTexture3D(target, dst_array_index, dst_level, dst_x_offset, dst_y_offset, dst_z_offset, dst_width, dst_height, dst_depth,
src_array_index, src_level, src_x_offset, src_y_offset, src_z_offset, src_width, src_height, src_depth, true);
}
}
示例7: glGenFramebuffers
void FrameBuffer::Init()
{
glGenFramebuffers(1, &id);
glBindFramebuffer(GL_FRAMEBUFFER, id);
// GetGame()->Log(glGetError());
drawBuffers.clear();
Texture* tex = nullptr;
if(textures.size() > 0)
{
for(uint i = 0; i < textures.size(); ++i)
{
tex = textures[i];
// tex->scaleFilter = Texture::ScaleFilter::Linear;
tex->wrapMode = Texture::WrapMode::Clamp;
// tex->mode = GL_TEXTURE_2D_MULTISAMPLE;
tex->size = uvec2(rect.width, rect.height);
tex->SetIndex(startIndex+i);
tex->InitData(0);
uint32 attachment = startIndex+GL_COLOR_ATTACHMENT0+i;
GetGame()->Log("Setting up textures for FrameBuffer, tex ", i, " gets attachment ", attachment, ". GL_COLOR_ATTACHMENT0 = ", GL_COLOR_ATTACHMENT0);
tex->Bind();
glFramebufferTexture2D(GL_FRAMEBUFFER, attachment, tex->GetMode(), tex->GetId(), 0);
drawBuffers.push_back(attachment);
}
}
if(hasDepth)
{
/* glGenRenderbuffers(1, &depthBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, depthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH24_STENCIL8, rect.width, rect.height);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, GL_RENDERBUFFER, depthBuffer);
*/
if(depthTexture)
{
// depthTexture->SetFormat(Texture::Format::Depth32F_Stencil8, Texture::Format::Depth);
depthTexture->SetFormat(Texture::Format::Depth32F, Texture::Format::Depth);
depthTexture->wrapMode = Texture::WrapMode::Clamp;
depthTexture->dataType = Texture::DataType::Float;
depthTexture->size = uvec2(rect.width, rect.height);
depthTexture->SetIndex(startIndex+textures.size());
depthTexture->InitData(0);
depthTexture->Bind();
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_STENCIL_ATTACHMENT, depthTexture->GetMode(), depthTexture->GetId(), 0);
GetGame()->Log(glGetError());
}
}
DrawBuffers();
BeginRender();
Unbind();
}
示例8: destroyTexture
//----------------------------------------------------------------------------//
void OpenGLRendererBase::destroyTexture(Texture& texture)
{
destroyTexture(texture.getName());
}
示例9: toTexture
bool Image::toTexture(Texture& texture) const
{
return texture.load((byte*)&_pixels.front(), _width, _height);
}
示例10: mainLevel
void mainLevel(RenderWindow &window)
{
//>>>>>>>>>>>>>>>---Level---<<<<<<<<<<<<<<<<<<<<<<<<<<<
Level lvl;
lvl.LoadFromFile("map.tmx");
//>>>>>>>>>>>>>>>>---Load basic image for level1----<<<<<<<<<<<<<<<<<
Texture texture;
texture.loadFromFile("images/level1empty.jpg");
Sprite level(texture);
Texture texture2;
texture2.loadFromFile("images/levelShad.png");
Sprite level2(texture2);
Texture texture3;
texture3.loadFromFile("images/level12.png");
Sprite level3(texture3);
//>>>>>>>>>>>>>>>>---Music---<<<<<<<<<<<<<<<<<<<<<<<<<<
Music mainSong;
Music skyrim, muse, bathMus;
bathMus.openFromFile("music/bath.ogg");
Object mus = lvl.GetObject("muse");
muse.openFromFile("music/synd.ogg"); muse.setVolume(100);
skyrim.openFromFile("music/skyrim.ogg"); skyrim.setVolume(100);
mainSong.openFromFile("music/level1.ogg");
mainSong.play();
mainSong.setLoop(true);
mainSong.setVolume(75);
//>>>>>>>>>>>>>>>>---Create a cat---<<<<<<<<<<<<<<<<<<<
Object player = lvl.GetObject("cat");
Object fish = lvl.GetObject("fish");
Object mo = lvl.GetObject("mouse");
Object ob = lvl.GetObject("catPlace");
Player cat("cat.png", lvl, 68, 429, 60, 120, player.rect.left, player.rect.top, ELSE);
Clock clock;
Clock gameTimeClock;
int sinkCnt = 0;
//>>>>>>>>>>>>>>>>---Sounds----<<<<<<<<<<<<<<<<<<<
SoundBuffer buf1, buf2;
buf1.loadFromFile("music/meow1.ogg");
buf2.loadFromFile("music/meow2.ogg");
Sound meow1, meow2;
meow1.setBuffer(buf1);
meow2.setBuffer(buf2);
SoundBuffer buf, buf3;
buf.loadFromFile("music/steklo.ogg");
buf3.loadFromFile("music/mouse.ogg");
Sound glass; Sound mouseS;
glass.setBuffer(buf); glass.setVolume(100);
mouseS.setBuffer(buf3);
//Objects
Furniture posters("tayles1.png", 160, 660, 210, 250, 280, 215, POSTERS);
Furniture bed("tayles1.png", 420, 80, 280, 310, 250, 440, ELSE);
Furniture toys("tayles1.png", 120, 470, 180, 150, 220, 545, TOYS);
Furniture upShelf("tayles1.png", 700, 652.5, 120, 97.5, 350, 83, SHELF);
Furniture cabinet("tayles1.png", 75, 40, 250, 350, 605, 305, CABINET);
Furniture mop("tayles1.png", 515, 785, 165, 241, 587, 385, MOP);
Furniture flower("tayles1.png",780, 65, 170, 330, 147, 285, ELSE);
Furniture ball("tayles1.png", 905, 615, 40, 55, 357, 190, BALL);
Furniture books("tayles1.png", 860, 735, 125, 80, 290, 187, BOOKS);
Furniture brokenBall("tayles1.png",920, 540, 90, 42, 430, 430, ELSE);
Furniture key("tayles1.png", 1, 1, 25, 25, 430, 425, KEY);
Furniture cabinetEnd("cabinet.png", 20, 50, 270, 350, 590, 290, ELSE);
Furniture girl("girlHair.png", 1,1, 96, 45, 1075, 350, ELSE);
Furniture door("tayles2.png", 0, 560, 80, 340, 870, 350, ELSE);
Furniture puddle("tayles1.png",789, 1000, 204, 75, 1057, 559, ELSE);
Furniture brokenLight("tayles2.png", 10, 110, 50, 70, 795, 430, ELSE);
Furniture light("tayles2.png", 20, 20, 35, 70, 220, 565, ELSE);
Furniture bath("tayles2.png", 80, 50, 320, 380, 1010, 330, BATH);
Furniture openBath("bathr.png", 264, 79, 339, 369, 1015, 315, ELSE);
Furniture carpet("tayles2.png", 100, 500, 100, 140, 870, 530, ELSE);
Furniture mirror("tayles2.png", 90, 700, 110, 290, 1200, 300, ELSE);
Furniture sink("tayles2.png", 290, 440, 150, 240, 1190, 450, SINK);
Furniture sinkWater("bathr.png", 22, 180, 197, 427, 1200, 540, ELSE);
Furniture mou("mouse.png", 2, 21, 32, 25, mo.rect.left, mo.rect.top, ELSE);
std::list<Furniture> fList;
std::list<Furniture>::iterator it;
fList.push_back(posters);
fList.push_back(toys);
fList.push_back(upShelf);
fList.push_back(cabinet);
fList.push_back(mop);
fList.push_back(ball);
fList.push_back(books);
fList.push_back(key);
fList.push_back(puddle);
fList.push_back(brokenLight);
fList.push_back(bath);
fList.push_back(sink);
//.........这里部分代码省略.........
示例11: UniqueID
void TextureStore::TileSwapper::load(const TileKey& key, TileRecord& record)
{
// Fetch the texture container.
const TextureContainer& textures =
key.m_assembly_uid == UniqueID(~0)
? m_scene.textures()
: m_assemblies[key.m_assembly_uid]->textures();
// Fetch the texture.
Texture* texture = textures.get_by_uid(key.m_texture_uid);
if (m_params.m_track_tile_loading)
{
RENDERER_LOG_DEBUG(
"loading tile (" FMT_SIZE_T ", " FMT_SIZE_T ") "
"from texture \"%s\"...",
key.get_tile_x(),
key.get_tile_y(),
texture->get_name());
}
// Load the tile.
record.m_tile = texture->load_tile(key.get_tile_x(), key.get_tile_y());
record.m_owners = 0;
// Convert the tile to the linear RGB color space.
switch (texture->get_color_space())
{
case ColorSpaceLinearRGB:
break;
case ColorSpaceSRGB:
convert_tile_srgb_to_linear_rgb(*record.m_tile);
break;
case ColorSpaceCIEXYZ:
convert_tile_ciexyz_to_linear_rgb(*record.m_tile);
break;
assert_otherwise;
}
// Track the amount of memory used by the tile cache.
m_memory_size += record.m_tile->get_memory_size();
m_peak_memory_size = max(m_peak_memory_size, m_memory_size);
if (m_params.m_track_store_size)
{
if (m_memory_size > m_params.m_memory_limit)
{
RENDERER_LOG_DEBUG(
"texture store size is %s, exceeding capacity %s by %s",
pretty_size(m_memory_size).c_str(),
pretty_size(m_params.m_memory_limit).c_str(),
pretty_size(m_memory_size - m_params.m_memory_limit).c_str());
}
else
{
RENDERER_LOG_DEBUG(
"texture store size is %s, below capacity %s by %s",
pretty_size(m_memory_size).c_str(),
pretty_size(m_params.m_memory_limit).c_str(),
pretty_size(m_params.m_memory_limit - m_memory_size).c_str());
}
}
}
示例12: MainLoop
UINT MainLoop(WindowManager *winmgr)
{
//window setting
Window window;
winmgr->RegisterWindow(&window);
ARSG g(window.hWnd, WINDOW_WIDTH, WINDOW_HEIGHT, true);
ARSI *keyIn = window.GetInputHandler();
ARSS s;
Sound bgm, badend, atk;
s.CreateSoundBuffer(&atk, L"../sound/atk.wav");
s.CreateSoundBuffer(&bgm, L"../sound/bgm.wav");
s.CreateSoundBuffer(&badend, L"../sound/fadein.wav");
//Texture
Texture board;
Texture bg;
Texture mask;
Texture gameover;
Texture clear;
//BitPlane
BitPlane source;
BitPlane stored;
BitPlane hitArea;
BitPlane bitmask;
//Light
Light light;
g.CreateLight(&light);
light.SetLightIntensity(10);
//Camera
ARSD d;
d.Init();
d.AttachCam(0);
d.BindBitPlane(&source);
d.StartGraph();
while (!source.GetPointer());
source.GetSize(&sizex, &sizey, &depth);
source.CopyTo(&stored);
//background
g.CreateTexture(&bg, L"../img/bgbg.jpg");
bg.SetDrawMode(true);
g.CreateTexture(&mask, L"../img/mask.jpg");
mask.SetDrawMode(true);
mask.GetBitData(&bitmask);
g.CreateTexture(&board, sizex, sizey);
board.SetDrawMode(true);
Mesh f;
g.CreateMesh(&f, L"../model/f4.x");
float scale=25.0f;
f.SetScale(scale, scale, scale, GL_ABSOLUTE);
f.SetPosition(45.0f, -4.0f, 65.0f, GL_ABSOLUTE);
f.SetRotationY(1.57f);
g.CreateTexture(&gameover, L"../img/gameover.jpg");
gameover.SetDrawMode(true);
g.CreateTexture(&clear, L"../img/clear.PNG");
gameover.SetDrawMode(true);
//gun
Gun gun(&g, &s, L"gun2.x", L"../sound/gun2.wav");
gun.DefaultPosition(0.0f, -1.2f, -17.0f);
gun.SetRotation(-0.1f, 3.14f, 0.0f, GL_ROTXYZ, GL_ABSOLUTE);
//enemy
int i, j;
Batman bats[BAT];
for(i=0,j=-1; i<BAT; ++i,j*=-1){
new(bats+i)Batman(j*3.0f, 5.0f, 25.0f, j*-1*0.02f, -0.03f, -0.25f, j*-1*0.04f);
bats[i].setting(&g, L"../model/bat.x");
}
Bone bons[BONE];
for(i=0; i<BONE; ++i){
new(bons+i)Bone(i*2, -4.8f, 20.0f, 0.0f, 0.01f, -0.25f);
bons[i].setting(&g, L"../model/bone.x");
}
Boss boss(0.0f, -8.0f, 5.0f);
boss.setSize(3.0f);
boss.setting(&g, L"../model/teki.x");
//add
g.RegisterLight(&light);
g.RegisterShape(&bg);
g.RegisterShape(&f);
for(i=0; i<BAT; ++i)
g.RegisterShape(&bats[i]);
g.RegisterShape(&board);
g.RegisterShape(&gun);
Effect e(&g);
Player p(&g);
enum {START, BAD, SCARLE, ARMER, BOSS, GAMEOVER, END};
int state = START;
unsigned int cnt=0;
j=0;
bgm.Play(true);
while (!winmgr->WaitingForTermination()){
if (keyIn->GetKeyTrig('A'))
source.CopyTo(&stored);
//.........这里部分代码省略.........
示例13: assert
void GameWorldPanel::render(Renderer &renderer)
{
assert(this->getGameState()->gameDataIsActive());
// Clear full screen.
renderer.clearNative();
renderer.clearOriginal();
// Draw game world onto the native frame buffer. The game world buffer
// might not completely fill up the native buffer (bottom corners), so
// clearing the native buffer beforehand is still necessary.
renderer.renderWorld();
// Set screen palette.
auto &textureManager = this->getGameState()->getTextureManager();
textureManager.setPalette(PaletteFile::fromName(PaletteName::Default));
// Set original frame buffer blending to true.
renderer.useTransparencyBlending(true);
// Draw game world interface.
const auto &gameInterface = textureManager.getTexture(
TextureFile::fromName(TextureName::GameWorldInterface));
renderer.drawToOriginal(gameInterface.get(), 0,
Renderer::ORIGINAL_HEIGHT - gameInterface.getHeight());
// Draw player portrait.
const auto &player = this->getGameState()->getGameData()->getPlayer();
const auto &headsFilename = PortraitFile::getHeads(
player.getGenderName(), player.getRaceName(), true);
const auto &portrait = textureManager.getTextures(headsFilename)
.at(player.getPortraitID());
const auto &status = textureManager.getTextures(
TextureFile::fromName(TextureName::StatusGradients)).at(0);
renderer.drawToOriginal(status.get(), 14, 166);
renderer.drawToOriginal(portrait.get(), 14, 166);
// Draw compass slider (the actual headings). +X is north, +Z is east.
// Should do some sin() and cos() functions to get the pixel offset.
auto *compassSlider = textureManager.getSurface(
TextureFile::fromName(TextureName::CompassSlider));
Texture compassSliderSegment = [&renderer, &compassSlider]()
{
SDL_Surface *segmentTemp = Surface::createSurfaceWithFormat(32, 7,
Renderer::DEFAULT_BPP, Renderer::DEFAULT_PIXELFORMAT);
SDL_Rect clipRect;
clipRect.x = 60; // Arbitrary offset until compass rotation works.
clipRect.y = 0;
clipRect.w = segmentTemp->w;
clipRect.h = segmentTemp->h;
SDL_BlitSurface(compassSlider, &clipRect, segmentTemp, nullptr);
SDL_Texture *segment = renderer.createTextureFromSurface(segmentTemp);
SDL_FreeSurface(segmentTemp);
return Texture(segment);
}();
renderer.drawToOriginal(compassSliderSegment.get(),
(Renderer::ORIGINAL_WIDTH / 2) - (compassSliderSegment.getWidth() / 2),
compassSliderSegment.getHeight());
// Draw compass frame over the headings.
const auto &compassFrame = textureManager.getTexture(
TextureFile::fromName(TextureName::CompassFrame));
renderer.drawToOriginal(compassFrame.get(),
(Renderer::ORIGINAL_WIDTH / 2) - (compassFrame.getWidth() / 2), 0);
// If the player's class can't use magic, show the darkened spell icon.
if (!player.getCharacterClass().canCastMagic())
{
const auto &nonMagicIcon = textureManager.getTexture(
TextureFile::fromName(TextureName::NoSpell));
renderer.drawToOriginal(nonMagicIcon.get(), 91, 177);
}
// Draw text: player name.
renderer.drawToOriginal(this->playerNameTextBox->getTexture(),
this->playerNameTextBox->getX(), this->playerNameTextBox->getY());
// Scale the original frame buffer onto the native one.
// This shouldn't be done for the game world interface because it needs to
// clamp to the screen edges, not the letterbox edges.
// Fix this eventually... again.
renderer.drawOriginalToNative();
// Draw cursor, depending on its position on the screen.
const Int2 mousePosition = this->getMousePosition();
const Texture &cursor = [this, &mousePosition, &textureManager]()
-> const Texture& // Interesting how this return type isn't deduced in MSVC.
{
// See which arrow cursor region the native mouse is in.
for (int i = 0; i < this->nativeCursorRegions.size(); ++i)
{
if (this->nativeCursorRegions.at(i)->contains(mousePosition))
{
//.........这里部分代码省略.........
示例14: switch
void SceneManagerDungeon::SpawnEnemy(MapEventEnemy* event, Enums::EnemyTypes type, float x, float y)
{
sf::Sprite sprite;
Texture* tex;
switch(type)
{
case Enums::EnemyDefault:
case Enums::EnemyChest:
tex = TextureList::getTexture(TextureList::EnemySpriteSheet);
break;
case Enums::EnemyBoss:
tex = TextureList::getTexture(TextureList::BossSpriteSheet);
}
sprite.setTexture(*tex);
sprite.setTextureRect(sf::IntRect(0,0,32,32));
Node* enemy = new AnimatedNode(&sprite, tex->GetNumberAnimationSteps());
switch(type)
{
case Enums::EnemyDefault:
case Enums::EnemyChest:
enemy->setBoundingBox(sf::FloatRect(4.0f,16.0f,20.0f,16.0f));
break;
case Enums::EnemyBoss:
enemy->setBoundingBox(sf::FloatRect(0.0f,0.0f,32.0f,32.0f));
}
m_eventLayer->addChild(enemy);
sf::Transform enemyTransform;
//Place Enemy at Position
enemyTransform.translate(x, y);
enemy->setTransform(enemyTransform);
std::vector<Entity*>* enemies = new std::vector<Entity*>();
Entity* e;
switch(type)
{
case Enums::EnemyDefault:
for(int i = 0; i < m_dungeonConfig->GetNrEnemies(); i++)
{
e = m_dungeonConfig->GetDungeonEnemy(m_lvlId);
e->SetTeamId(1);
enemies->push_back(e);
}
break;
case Enums::EnemyBoss:
{
int nrAdds = 0;
for(; nrAdds < m_dungeonConfig->GetNrBossAdds() / 2; nrAdds++)
{
e = m_dungeonConfig->GetDungeonEnemy(m_lvlId);
e->SetTeamId(1);
enemies->push_back(e);
}
e = m_dungeonConfig->GetDungeonBoss(m_lvlId);
e->SetTeamId(1);
enemies->push_back(e);
for(; nrAdds < m_dungeonConfig->GetNrBossAdds(); nrAdds++)
{
e = m_dungeonConfig->GetDungeonEnemy(m_lvlId);
e->SetTeamId(1);
enemies->push_back(e);
}
}
break;
case Enums::EnemyChest:
for(int i = 0; i < m_dungeonConfig->GetNrEnemies() + 1; i++)
{
e = m_dungeonConfig->GetDungeonEnemy(m_lvlId + 2);
e->SetTeamId(1);
enemies->push_back(e);
}
break;
}
event->Init(&m_map, enemy, enemies);
}
示例15: create_texture_from_image
Texture create_texture_from_image(const ImagePtr& the_img, bool mipmap,
bool compress, GLfloat anisotropic_filter_lvl)
{
Texture ret;
if(!the_img){ return ret; }
GLenum format = 0, internal_format = 0;
switch(the_img->bytes_per_pixel)
{
#ifdef KINSKI_GLES
case 1:
internal_format = format = GL_LUMINANCE;
break;
case 2:
internal_format = format = GL_LUMINANCE_ALPHA;
break;
case 3:
internal_format = format = GL_RGB;
// needs precompressed image and call to glCompressedTexImage2D
// internal_format = compress ? GL_ETC1_RGB8_OES : GL_RGB;
break;
case 4:
internal_format = format = GL_RGBA;
default:
break;
#else
case 1:
format = GL_RED;
internal_format = compress? GL_COMPRESSED_RED_RGTC1 : GL_RGBA;
break;
case 2:
format = GL_RG;
internal_format = compress? GL_COMPRESSED_RG_RGTC2 : GL_RGBA;
break;
case 3:
format = GL_RGB;
internal_format = compress? GL_COMPRESSED_RGB_S3TC_DXT1_EXT : GL_RGBA;
break;
case 4:
format = GL_RGBA;
internal_format = compress? GL_COMPRESSED_RGBA_S3TC_DXT5_EXT : GL_RGBA;
default:
break;
#endif
}
Texture::Format fmt;
fmt.set_internal_format(internal_format);
if(mipmap)
{
fmt.set_mipmapping();
fmt.set_min_filter(GL_LINEAR_MIPMAP_NEAREST);
}
uint8_t *data = the_img->data;
#if !defined(KINSKI_GLES)
gl::Buffer pixel_buf;
pixel_buf.set_data(the_img->data, the_img->num_bytes());
pixel_buf.bind(GL_PIXEL_UNPACK_BUFFER);
data = nullptr;
#endif
ret = Texture(data, format, the_img->width, the_img->height, fmt);
ret.set_flipped();
KINSKI_CHECK_GL_ERRORS();
ret.set_anisotropic_filter(anisotropic_filter_lvl);
return ret;
}