OpenGL:
- add support quad primitives (fix wireframe: Nanostray 2 menu and stage select screen, Harvest Moon Frantic Farming);
This commit is contained in:
parent
1994e00506
commit
8266164a60
|
@ -30,6 +30,8 @@
|
||||||
#include "OGLRender.h"
|
#include "OGLRender.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
CACHE_ALIGN float material_8bit_to_float[255] = {0};
|
||||||
|
|
||||||
bool (*oglrender_init)() = 0;
|
bool (*oglrender_init)() = 0;
|
||||||
bool (*oglrender_beginOpenGL)() = 0;
|
bool (*oglrender_beginOpenGL)() = 0;
|
||||||
void (*oglrender_endOpenGL)() = 0;
|
void (*oglrender_endOpenGL)() = 0;
|
||||||
|
@ -400,6 +402,9 @@ static char OGLInit(void)
|
||||||
if(!BEGINGL())
|
if(!BEGINGL())
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
for (u8 i = 0; i < 255; i++)
|
||||||
|
material_8bit_to_float[i] = (float)(i<<2)/255.f;
|
||||||
|
|
||||||
expandFreeTextures();
|
expandFreeTextures();
|
||||||
|
|
||||||
glPixelStorei(GL_PACK_ALIGNMENT,8);
|
glPixelStorei(GL_PACK_ALIGNMENT,8);
|
||||||
|
@ -879,40 +884,6 @@ static void OGLRender()
|
||||||
BeginRenderPoly();
|
BeginRenderPoly();
|
||||||
}
|
}
|
||||||
|
|
||||||
//since we havent got the whole pipeline working yet, lets use opengl for the projection
|
|
||||||
/* if(lastProjIndex != poly->projIndex) {
|
|
||||||
glMatrixMode(GL_PROJECTION);
|
|
||||||
glLoadMatrixf(gfx3d.projlist->projMatrix[poly->projIndex]);
|
|
||||||
lastProjIndex = poly->projIndex;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/* glBegin(type==3?GL_TRIANGLES:GL_QUADS);
|
|
||||||
for(int j=0;j<type;j++) {
|
|
||||||
VERT* vert = &gfx3d.vertlist->list[poly->vertIndexes[j]];
|
|
||||||
u8 color[4] = {
|
|
||||||
material_5bit_to_8bit[vert->color[0]],
|
|
||||||
material_5bit_to_8bit[vert->color[1]],
|
|
||||||
material_5bit_to_8bit[vert->color[2]],
|
|
||||||
material_5bit_to_8bit[vert->color[3]]
|
|
||||||
};
|
|
||||||
|
|
||||||
//float tempCoord[4];
|
|
||||||
//Vector4Copy(tempCoord, vert->coord);
|
|
||||||
//we havent got the whole pipeline working yet, so we cant do this
|
|
||||||
////convert from ds device coords to opengl
|
|
||||||
//tempCoord[0] *= 2;
|
|
||||||
//tempCoord[1] *= 2;
|
|
||||||
//tempCoord[0] -= 1;
|
|
||||||
//tempCoord[1] -= 1;
|
|
||||||
|
|
||||||
//todo - edge flag?
|
|
||||||
glTexCoord2fv(vert->texcoord);
|
|
||||||
glColor4ubv((GLubyte*)color);
|
|
||||||
//glVertex4fv(tempCoord);
|
|
||||||
glVertex4fv(vert->coord);
|
|
||||||
}
|
|
||||||
glEnd();*/
|
|
||||||
|
|
||||||
if(lastViewport != poly->viewport)
|
if(lastViewport != poly->viewport)
|
||||||
{
|
{
|
||||||
VIEWPORT viewport;
|
VIEWPORT viewport;
|
||||||
|
@ -921,50 +892,24 @@ static void OGLRender()
|
||||||
lastViewport = poly->viewport;
|
lastViewport = poly->viewport;
|
||||||
}
|
}
|
||||||
|
|
||||||
glBegin(GL_TRIANGLES);
|
|
||||||
|
|
||||||
VERT *vert0 = &gfx3d.vertlist->list[poly->vertIndexes[0]];
|
|
||||||
float alpha = poly->getAlpha()/31.0f;
|
float alpha = poly->getAlpha()/31.0f;
|
||||||
if(wireframe) alpha = 1.0;
|
if(wireframe) alpha = 1.0;
|
||||||
float color0[4] = {
|
|
||||||
(vert0->color[0]<<2)/255.0f,
|
|
||||||
(vert0->color[1]<<2)/255.0f,
|
|
||||||
(vert0->color[2]<<2)/255.0f,
|
|
||||||
alpha
|
|
||||||
};
|
|
||||||
|
|
||||||
//this draws things as a fan to prepare for the day when the clipping is done in gfx3d
|
if (type == 4)
|
||||||
//and funny shaped polys find their way into here.
|
glBegin(GL_QUADS);
|
||||||
//of course it could really be drawn as a fan, i suppose.. i dont remember why we did it this way
|
else
|
||||||
for(int j = 1; j < (type-1); j++)
|
glBegin(GL_TRIANGLES);
|
||||||
|
|
||||||
|
for(int j = 0; j < type; j++)
|
||||||
{
|
{
|
||||||
VERT *vert1 = &gfx3d.vertlist->list[poly->vertIndexes[j]];
|
VERT *vert = &gfx3d.vertlist->list[poly->vertIndexes[j]];
|
||||||
VERT *vert2 = &gfx3d.vertlist->list[poly->vertIndexes[j+1]];
|
|
||||||
|
|
||||||
float color1[4] = {
|
glTexCoord2fv(vert->texcoord);
|
||||||
(vert1->color[0]<<2)/255.0f,
|
glColor4f(material_8bit_to_float[vert->color[0]],
|
||||||
(vert1->color[1]<<2)/255.0f,
|
material_8bit_to_float[vert->color[1]],
|
||||||
(vert1->color[2]<<2)/255.0f,
|
material_8bit_to_float[vert->color[2]],
|
||||||
alpha
|
alpha);
|
||||||
};
|
glVertex4fv(vert->coord);
|
||||||
float color2[4] = {
|
|
||||||
(vert2->color[0]<<2)/255.0f,
|
|
||||||
(vert2->color[1]<<2)/255.0f,
|
|
||||||
(vert2->color[2]<<2)/255.0f,
|
|
||||||
alpha
|
|
||||||
};
|
|
||||||
|
|
||||||
glTexCoord2fv(vert0->texcoord);
|
|
||||||
glColor4fv((GLfloat*)color0);
|
|
||||||
glVertex4fv(vert0->coord);
|
|
||||||
|
|
||||||
glTexCoord2fv(vert1->texcoord);
|
|
||||||
glColor4fv((GLfloat*)color1);
|
|
||||||
glVertex4fv(vert1->coord);
|
|
||||||
|
|
||||||
glTexCoord2fv(vert2->texcoord);
|
|
||||||
glColor4fv((GLfloat*)color2);
|
|
||||||
glVertex4fv(vert2->coord);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
glEnd();
|
glEnd();
|
||||||
|
|
Loading…
Reference in New Issue