INLINE void OGLES1RendererDevice::UploadData(void *userData) { RendererPacket *packet = static_cast<RendererPacket *>(userData); ITexture *texture = packet->pTexture; GLuint *t = static_cast<GLuint *>(texture->GetTextureName()); GLuint tex = (GLuint)t; sVertex *data = static_cast<sVertex *>(packet->pVertexData); this->SetBlendingOperation(packet->nBlendMode, packet->iColor.pixel); sVertex v1 = data[0]; sVertex v2 = data[1]; sVertex v3 = data[2]; sVertex v4 = data[3]; glBindTexture(GL_TEXTURE_2D, tex); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); eTextureFilter min = texture->GetFilter(Seed::TextureFilterTypeMin); eTextureFilter mag = texture->GetFilter(Seed::TextureFilterTypeMag); if (min == Seed::TextureFilterLinear) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); else if (min == Seed::TextureFilterNearest) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); if (mag == Seed::TextureFilterLinear) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); else if (mag == Seed::TextureFilterNearest) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glVertexPointer(3, GL_FLOAT, sizeof(sVertex), &data[0].cVertex); glColorPointer(4, GL_UNSIGNED_BYTE, sizeof(sVertex), &data[0].iColor); glTexCoordPointer(2, GL_FLOAT, sizeof(sVertex), &data[0].cCoords); glDrawArrays(GL_TRIANGLE_STRIP, 0, packet->iSize); }
INLINE void OGLES1RendererDevice::TextureRequestProcess() const { for (u32 i = 0; i < arTexture.Size(); i++) { ITexture *texture = arTexture[i]; if (texture) { GLint tex = 0; glGenTextures(1, (GLuint *)&tex); glBindTexture(GL_TEXTURE_2D, (GLuint)tex); eTextureFilter min = texture->GetFilter(Seed::TextureFilterTypeMin); eTextureFilter mag = texture->GetFilter(Seed::TextureFilterTypeMag); if (min == Seed::TextureFilterLinear) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); else if (min == Seed::TextureFilterNearest) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); if (mag == Seed::TextureFilterLinear) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); else if (mag == Seed::TextureFilterNearest) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); const void *data = texture->GetData(); // if data == NULL then this can be a dynamic texture. we need just the texture id. if (data) { GLuint w = texture->GetAtlasWidthInPixel(); GLuint h = texture->GetAtlasHeightInPixel(); //BOOL compressed = texture->IsCompressed(); u32 bpp = texture->GetBytesPerPixel(); /*if (compressed) { GLuint bpp = 2; GLsizei size = w * h * bpp / 8; if (size < 32) { size = 32; } glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_COMPRESSED_RGB_PVRTC_2BPPV1_IMG, w, h, 0, size, data); } else*/ { switch (bpp) { case 4: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, w, h, 0, GL_RGBA, GL_UNSIGNED_BYTE, data); break; case 3: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_BYTE, data); break; case 2: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, w, h, 0, GL_RGB, GL_UNSIGNED_SHORT_5_6_5, data); break; case 1: glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, w, h, 0, GL_ALPHA, GL_UNSIGNED_BYTE, data); break; default: break; } } } //glBindTexture(GL_TEXTURE_2D, 0); texture->iTextureId = tex; texture->Close(); // free ram } } arTexture.Truncate(); }