Re: TGALoader für OpenGL
Verfasst: Mi Jan 26, 2011 4:39 pm
klar hab ich schon gemacht.
wobei...
Bevor oder nachdem man die texture geladen hat ???
wobei...
Bevor oder nachdem man die texture geladen hat ???
Vor dem Zeichnen.paparoach777 hat geschrieben:klar hab ich schon gemacht.
wobei...
Bevor oder nachdem man die texture geladen hat ???
Das ist eigentlich egal, da OpenGL ja nichts anderes als eine große Statemachine ist. Solange du es nicht änderst, bleibt es immer gleich. Einen Einfluss hat es erst beim Rendern. Es sollte also irgendwann vor dem Rendern aktiviert werden.paparoach777 hat geschrieben: Ich meinte vor dem Laden oder danach ( in meinem Code also vor oder nach LoadTGA )
Welche Farbe sollte es denn haben? Ist das genau die Farbe die du mit glColor angegeben hast? Bist du sicher das der TGA Loader funktioniert - also dass die Daten genau in dem Format vorliegen das du bei glTexImage angibst?paparoach777 hat geschrieben:Aber auf dem Bildschirm ist nur ein schwarzes Quadrat...
Code: Alles auswählen
#include<stdio.h>
#include<stdlib.h>
#include"GLheaders.h"
typedef struct{
char IDsize;
char colormaptype;
char imagetype;
unsigned short colormapstart;
unsigned short colormaplength;
unsigned char colormapbits;
unsigned short xstart;
unsigned short ystart;
unsigned short width;
unsigned short height;
char bpp;
char descriptor;
}TGA_HEADER;
GLbyte* LoadTGA(const char *szFileName, GLint *iWidth, GLint *iHeight, GLint *iComponents, GLenum *eFormat){
FILE *data;
TGA_HEADER header;
unsigned long imageSize;
short depth;
GLbyte *pbits;
//default
*iWidth = 0;
*iHeight = 0;
*eFormat = GL_BGR_EXT;
*iComponents = GL_RGB8;
data = fopen(szFileName, "rb");
if(data == NULL){
return NULL;
}
fread(&header, 18, 1, data);
*iWidth = header.width;
*iHeight = header.height;
depth = header.bpp / 8;
if(header.bpp != 8 && header.bpp != 24 && header.bpp != 32){
return NULL;
}
imageSize = header.width * header.height * header.bpp;
pbits = (GLbyte*)malloc(imageSize * sizeof(GLbyte));
if(pbits == NULL){
return NULL;
}
if(fread(pbits, imageSize, 1, data) != 1)
{
free(pbits);
return NULL;
}
switch(depth)
{
case 3: // Most likely case
*eFormat = GL_BGR_EXT;
*iComponents = GL_RGB8;
break;
case 4:
*eFormat = GL_BGRA_EXT;
*iComponents = GL_RGBA8;
break;
case 1:
*eFormat = GL_LUMINANCE;
*iComponents = GL_LUMINANCE8;
break;
};
fclose(data);
return pbits;
}