2 #include "Platform/Core/PlatformCore.h"
5 bool OpenGLTexture::initWithETCImage(FileHandle * aFile)
8 unsigned long L_filelength = 0;
12 myTextureType = TEXTURE_2D;
18 unsigned int datasize;
22 ETC_Header* imageheader=(ETC_Header*)L_RawBuffer->buffer();
25 int L_DataLen=imageheader->datasize;
28 unsigned char* imgdata=(
unsigned char*)L_RawBuffer->buffer();
29 imgdata+=
sizeof(ETC_Header);
30 unsigned char* L_pData =
new unsigned char[L_DataLen];
31 memcpy(L_pData, imgdata, L_DataLen);
32 myPow2Width = imageheader->sizex&0xFFFF;
33 myPow2Height = imageheader->sizey&0xFFFF;
35 myWidth = (short)myPow2Width;
36 myHeight = (short)myPow2Height;
38 if((imageheader->sizex & 0xFFFF0000) || (imageheader->sizey & 0xFFFF0000))
40 myWidth = ((imageheader->sizex >> 16)& 0xFFFF);
41 myHeight = ((imageheader->sizey >> 16)& 0xFFFF);
47 bool L_bHasAlpha =
false;
48 unsigned int L_Format = (imageheader->format & 0xFFFF);
53 glGenTextures(1, &myIDETCAlphaTexture);
55 glBindTexture( GL_TEXTURE_2D, myTextureGLIndex );
56 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
57 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
58 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
59 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
61 if(myIDETCAlphaTexture)
63 glBindTexture( GL_TEXTURE_2D, myIDETCAlphaTexture );
64 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
65 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
66 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
67 glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE );
71 unsigned int L_TotalSize = (myPow2Width*myPow2Height)/2;
74 glBindTexture(GL_TEXTURE_2D, myTextureGLIndex);
76 glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_ETC1_RGB8_OES, (GLsizei)myPow2Width, (GLsizei)myPow2Height, 0,L_TotalSize, L_pData);
78 myTransparencyType = 0;
82 glBindTexture(GL_TEXTURE_2D, myTextureGLIndex);
84 glCompressedTexImage2D(GL_TEXTURE_2D, 0, GL_ETC1_RGB8_OES, (GLsizei)myPow2Width, (GLsizei)myPow2Height, 0,L_TotalSize, L_pData);
86 glBindTexture(GL_TEXTURE_2D, myIDETCAlphaTexture);
87 unsigned char* alphastart=(
unsigned char*)L_pData;
88 alphastart += L_TotalSize;
89 glTexImage2D(GL_TEXTURE_2D, 0, GL_ALPHA, (GLsizei)myPow2Width, (GLsizei)myPow2Height, 0, GL_ALPHA, GL_UNSIGNED_BYTE, alphastart);
90 myTransparencyType = 2;
98 printf(
"LoadFile %s Failed\n", aFile->myFullFileName.c_str());
106 bool OpenGLTexture::CubeMapGeneration()
110 kstl::string fullfilename;
115 kstl::string extension=myFileName;
116 extension=extension.substr(extension.rfind(
"."));
118 kstl::string basefilename=myFileName;
119 basefilename=basefilename.substr(0,basefilename.length()-extension.length());
123 for(index=0;index<6;index++)
125 kstl::string filename=basefilename;
127 sprintf(asciiCount,
"%d",(index+1));
128 filename+=asciiCount;
131 SmartPointer<FileHandle> fullfilenamehandle = pathManager->
FindFullName(filename);
132 if(fullfilenamehandle != 0)
134 fullfilename = fullfilenamehandle->myFullFileName;
165 while (pow2sizex < image->GetWidth())
167 pow2sizex = pow2sizex << 1;
171 while (pow2sizey < image->GetHeight())
173 pow2sizey = pow2sizey << 1;
179 if (((pow2sizex != image->GetWidth()) || (pow2sizey != image->GetHeight())) && myForcePow2)
181 if ((image->GetFormat() != TinyImage::BC1) && (image->GetFormat() != TinyImage::BC2) && (image->GetFormat() != TinyImage::BC3) )
182 image->FastResize(pow2sizex, pow2sizey);
184 myPow2Width=pow2sizex;
185 myPow2Height=pow2sizey;
188 switch(image->GetFormat())
190 case TinyImage::ABGR_16_1555_DIRECT_COLOR:
191 case TinyImage::RGB_16_565 :
192 case TinyImage::RGBA_16_5551 :
193 case TinyImage::RGBA_32_8888 :
194 case TinyImage::RGB_24_888 :
195 return CreateFromBuffer(image->GetPixelData(),image->GetWidth(),image->GetHeight(),image->GetFormat());
202 unsigned int L_TextureFormat;
203 unsigned int L_TextureLevel;
204 unsigned int L_TextureTypes;
206 myWidth = image->GetWidth();
207 myHeight = image->GetHeight();
208 L_TextureTypes = TEXTURE_2D;
225 unsigned char* imageData = image->GetPixelData();
227 unsigned int dataSize = image->GetPixelDataSize();
229 unsigned int pixCount = image->GetHeight()*image->GetWidth();
231 unsigned short* data =
new unsigned short[pixCount];
233 KIGS_MESSAGE(
"Create From image\n");
235 sprintf(message,
"DataSize = %i\n", dataSize);
236 KIGS_MESSAGE(message);
238 sprintf(message,
"pixCount = %i\n", pixCount);
239 KIGS_MESSAGE(message);
241 sprintf(message,
"myWidth = %i\n", (
int)myWidth);
242 KIGS_MESSAGE(message);
244 sprintf(message,
"myHeight = %i\n", (
int)myHeight);
245 KIGS_MESSAGE(message);
247 switch (image->GetFormat())
250 case TinyImage::PALETTE16_256_COLOR :
252 L_TextureLevel = GL_RGBA;
253 L_TextureFormat = GL_RGBA;
254 L_TextureTypes = GL_UNSIGNED_SHORT_5_5_5_1;
255 unsigned short* palette = (
unsigned short*)image->GetPaletteData();
256 unsigned int colorCount = image->GetPaletteDataSize()/2;
260 palette[0] = (palette[0]<<1);
262 for(
int index=1; index < colorCount; index++)
263 palette[index] = (palette[index]<<1)|0x1;
266 for(
int index=0; index < dataSize; index++)
267 data[index] = palette[imageData[index]];
269 glBindTexture (GL_TEXTURE_2D, myTextureGLIndex);
270 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
271 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
273 glTexImage2D (GL_TEXTURE_2D, 0, L_TextureLevel, myWidth, myHeight, 0, L_TextureFormat, L_TextureTypes, data);
274 myTransparencyType = 1;
275 KIGS_ASSERT(glGetError()==GL_NO_ERROR);
276 glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
277 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
278 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
281 case TinyImage::PALETTE16_16_COLOR :
283 L_TextureLevel = GL_RGBA;
284 L_TextureFormat = GL_RGBA;
285 L_TextureTypes = GL_UNSIGNED_SHORT_5_5_5_1;
286 unsigned short* palette = (
unsigned short*)image->GetPaletteData();
287 unsigned int colorCount = image->GetPaletteDataSize()/2;
292 palette[0] = (palette[0]<<1);
294 for(index=1; index < colorCount; index++)
295 palette[index] = (palette[index]<<1)|0x1;
298 for(index=0; index < dataSize; index++) {
299 unsigned char p1 = imageData[index]&0x0f;
300 unsigned char p2 = imageData[index]>>4;
303 data[2*index] = palette[p1];
304 data[2*index+1] = palette[p2];
307 glBindTexture (GL_TEXTURE_2D, myTextureGLIndex);
308 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
309 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
311 glTexImage2D (GL_TEXTURE_2D, 0, L_TextureLevel, myWidth, myHeight, 0, L_TextureFormat, L_TextureTypes, data);
312 myTransparencyType = 1;
313 KIGS_ASSERT(glGetError()==GL_NO_ERROR);
314 glPixelStorei (GL_UNPACK_ALIGNMENT, 1);
315 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
316 glTexParameteri (GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
322 KIGS_ASSERT(0 &&
"not supported format");