Fixed texture filtering modes.
This commit is contained in:
parent
c12ec5ff7e
commit
96a5583f3b
4 changed files with 126 additions and 117 deletions
14
src/main.c
14
src/main.c
|
@ -494,18 +494,6 @@ void FlipBuffers()
|
||||||
SDL_GL_SwapBuffers();
|
SDL_GL_SwapBuffers();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ThisFramesRenderingHasBegun()
|
|
||||||
{
|
|
||||||
/* sets scene defaults */
|
|
||||||
}
|
|
||||||
|
|
||||||
void ThisFramesRenderingHasFinished()
|
|
||||||
{
|
|
||||||
/* This is where the queued drawing commands' execution takes place */
|
|
||||||
|
|
||||||
LightBlockDeallocation();
|
|
||||||
}
|
|
||||||
|
|
||||||
int ExitWindowsSystem()
|
int ExitWindowsSystem()
|
||||||
{
|
{
|
||||||
SDL_Quit();
|
SDL_Quit();
|
||||||
|
@ -602,7 +590,7 @@ int main(int argc, char *argv[])
|
||||||
// SetLevelToLoad(AVP_ENVIRONMENT_SUBWAY_MP);
|
// SetLevelToLoad(AVP_ENVIRONMENT_SUBWAY_MP);
|
||||||
|
|
||||||
// SetLevelToLoad(AVP_ENVIRONMENT_LEADWORKS_COOP); /* coop/skirmish */
|
// SetLevelToLoad(AVP_ENVIRONMENT_LEADWORKS_COOP); /* coop/skirmish */
|
||||||
|
|
||||||
// SetLevelToLoad(AVP_ENVIRONMENT_E3DEMOSP); /* demo level */
|
// SetLevelToLoad(AVP_ENVIRONMENT_E3DEMOSP); /* demo level */
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
217
src/opengl.c
217
src/opengl.c
|
@ -47,31 +47,62 @@ static D3DTexture *CurrTextureHandle;
|
||||||
static enum TRANSLUCENCY_TYPE CurrentTranslucencyMode = TRANSLUCENCY_OFF; /* opengl state variable */
|
static enum TRANSLUCENCY_TYPE CurrentTranslucencyMode = TRANSLUCENCY_OFF; /* opengl state variable */
|
||||||
static enum FILTERING_MODE_ID CurrentFilteringMode = FILTERING_BILINEAR_OFF;
|
static enum FILTERING_MODE_ID CurrentFilteringMode = FILTERING_BILINEAR_OFF;
|
||||||
|
|
||||||
static GLuint CurrentlyBoundTexture = 0; /* opengl state variable */
|
static D3DTexture *CurrentlyBoundTexture = NULL; /* opengl state variable (->id) */
|
||||||
|
|
||||||
static void CheckBoundTextureIsCorrect(GLuint tex)
|
static void CheckBoundTextureIsCorrect(D3DTexture *tex)
|
||||||
{
|
{
|
||||||
if (tex == CurrentlyBoundTexture)
|
if (tex == CurrentlyBoundTexture)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
glBindTexture(GL_TEXTURE_2D, tex);
|
if (tex == NULL) {
|
||||||
|
glBindTexture(GL_TEXTURE_2D, 0);
|
||||||
|
|
||||||
|
CurrentlyBoundTexture = NULL;
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
glBindTexture(GL_TEXTURE_2D, tex->id);
|
||||||
|
|
||||||
/*
|
if (tex->filter != CurrentFilteringMode) {
|
||||||
switch(CurrentFilteringMode) {
|
switch(CurrentFilteringMode) {
|
||||||
case FILTERING_BILINEAR_OFF:
|
case FILTERING_BILINEAR_OFF:
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
break;
|
break;
|
||||||
case FILTERING_BILINEAR_ON:
|
case FILTERING_BILINEAR_ON:
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
}
|
||||||
|
|
||||||
|
tex->filter = CurrentFilteringMode;
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
||||||
CurrentlyBoundTexture = tex;
|
CurrentlyBoundTexture = tex;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void CheckFilteringModeIsCorrect(enum FILTERING_MODE_ID filter)
|
||||||
|
{
|
||||||
|
CurrentFilteringMode = filter;
|
||||||
|
|
||||||
|
if (CurrentlyBoundTexture && CurrentlyBoundTexture->filter != CurrentFilteringMode) {
|
||||||
|
switch(CurrentFilteringMode) {
|
||||||
|
case FILTERING_BILINEAR_OFF:
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||||
|
break;
|
||||||
|
case FILTERING_BILINEAR_ON:
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||||
|
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
|
||||||
|
CurrentlyBoundTexture->filter = CurrentFilteringMode;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void CheckTranslucencyModeIsCorrect(enum TRANSLUCENCY_TYPE mode)
|
static void CheckTranslucencyModeIsCorrect(enum TRANSLUCENCY_TYPE mode)
|
||||||
{
|
{
|
||||||
|
@ -117,27 +148,6 @@ static void CheckTranslucencyModeIsCorrect(enum TRANSLUCENCY_TYPE mode)
|
||||||
CurrentTranslucencyMode = mode;
|
CurrentTranslucencyMode = mode;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CheckFilteringModeIsCorrect(enum FILTERING_MODE_ID filter)
|
|
||||||
{
|
|
||||||
if (filter == CurrentFilteringMode)
|
|
||||||
return;
|
|
||||||
|
|
||||||
switch(filter) {
|
|
||||||
case FILTERING_BILINEAR_OFF:
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
|
||||||
break;
|
|
||||||
case FILTERING_BILINEAR_ON:
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
|
||||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
fprintf(stderr, "CheckFilteringModeIsCorrect: filter = %d\n", filter);
|
|
||||||
}
|
|
||||||
|
|
||||||
CurrentFilteringMode = filter;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define TA_MAXVERTICES 8
|
#define TA_MAXVERTICES 8
|
||||||
typedef struct TriangleArray
|
typedef struct TriangleArray
|
||||||
{
|
{
|
||||||
|
@ -326,14 +336,30 @@ GLuint CreateOGLTexture(D3DTexture *tex, unsigned char *buf)
|
||||||
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);
|
||||||
|
|
||||||
tex->id = h;
|
tex->id = h;
|
||||||
|
tex->filter = FILTERING_BILINEAR_ON;
|
||||||
glBindTexture(GL_TEXTURE_2D, CurrentlyBoundTexture); /* restore current */
|
|
||||||
|
if (CurrentlyBoundTexture)
|
||||||
|
glBindTexture(GL_TEXTURE_2D, CurrentlyBoundTexture->id); /* restore current */
|
||||||
|
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ** */
|
/* ** */
|
||||||
|
|
||||||
|
void ThisFramesRenderingHasBegun()
|
||||||
|
{
|
||||||
|
CheckFilteringModeIsCorrect(FILTERING_BILINEAR_ON);
|
||||||
|
}
|
||||||
|
|
||||||
|
void ThisFramesRenderingHasFinished()
|
||||||
|
{
|
||||||
|
/* This is where the queued drawing commands' execution takes place */
|
||||||
|
|
||||||
|
LightBlockDeallocation();
|
||||||
|
}
|
||||||
|
|
||||||
|
/* ** */
|
||||||
|
|
||||||
void FlushD3DZBuffer()
|
void FlushD3DZBuffer()
|
||||||
{
|
{
|
||||||
glClear(GL_DEPTH_BUFFER_BIT);
|
glClear(GL_DEPTH_BUFFER_BIT);
|
||||||
|
@ -370,7 +396,7 @@ void D3D_Rectangle(int x0, int y0, int x1, int y1, int r, int g, int b, int a)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_GLOWING);
|
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_GLOWING);
|
||||||
CheckBoundTextureIsCorrect(0);
|
CheckBoundTextureIsCorrect(NULL);
|
||||||
|
|
||||||
glColor4ub(r, g, b, a);
|
glColor4ub(r, g, b, a);
|
||||||
|
|
||||||
|
@ -431,10 +457,20 @@ void D3D_ZBufferedGouraudTexturedPolygon_Output(POLYHEADER *inputPolyPtr, RENDER
|
||||||
|
|
||||||
CheckTranslucencyModeIsCorrect(RenderPolygon.TranslucencyMode);
|
CheckTranslucencyModeIsCorrect(RenderPolygon.TranslucencyMode);
|
||||||
|
|
||||||
RecipW = (1.0f/65536.0f)/128.0f;
|
if (TextureHandle->w == 128) {
|
||||||
RecipH = (1.0f/65536.0f)/128.0f;
|
RecipW = (1.0f / 128.0f) / 65536.0f;
|
||||||
|
} else {
|
||||||
|
float width = TextureHandle->w;
|
||||||
|
RecipW = (1.0f / width) / 65536.0f;
|
||||||
|
}
|
||||||
|
if (TextureHandle->h == 128) {
|
||||||
|
RecipH = (1.0f / 128.0f) / 65536.0f;
|
||||||
|
} else {
|
||||||
|
float height = TextureHandle->h;
|
||||||
|
RecipH = (1.0f / height) / 65536.0f;
|
||||||
|
}
|
||||||
|
|
||||||
CheckBoundTextureIsCorrect(TextureHandle->id);
|
CheckBoundTextureIsCorrect(TextureHandle);
|
||||||
|
|
||||||
for (i = 0; i < RenderPolygon.NumberOfVertices; i++) {
|
for (i = 0; i < RenderPolygon.NumberOfVertices; i++) {
|
||||||
RENDERVERTEX *vertices = &renderVerticesPtr[i];
|
RENDERVERTEX *vertices = &renderVerticesPtr[i];
|
||||||
|
@ -491,7 +527,7 @@ void D3D_ZBufferedGouraudTexturedPolygon_Output(POLYHEADER *inputPolyPtr, RENDER
|
||||||
tarr.elements = RenderPolygon.NumberOfVertices;
|
tarr.elements = RenderPolygon.NumberOfVertices;
|
||||||
DrawTriangles_T2F_C4UB_V4F();
|
DrawTriangles_T2F_C4UB_V4F();
|
||||||
|
|
||||||
CheckBoundTextureIsCorrect(0);
|
CheckBoundTextureIsCorrect(NULL);
|
||||||
|
|
||||||
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_GLOWING);
|
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_GLOWING);
|
||||||
|
|
||||||
|
@ -511,24 +547,29 @@ void D3D_SkyPolygon_Output(POLYHEADER *inputPolyPtr, RENDERVERTEX *renderVertice
|
||||||
int texoffset;
|
int texoffset;
|
||||||
D3DTexture *TextureHandle;
|
D3DTexture *TextureHandle;
|
||||||
int i;
|
int i;
|
||||||
GLfloat ZNear;
|
|
||||||
float RecipW, RecipH;
|
float RecipW, RecipH;
|
||||||
|
|
||||||
ZNear = (GLfloat) (Global_VDB_Ptr->VDB_ClipZ * GlobalScale);
|
|
||||||
|
|
||||||
texoffset = inputPolyPtr->PolyColour & ClrTxDefn;
|
texoffset = inputPolyPtr->PolyColour & ClrTxDefn;
|
||||||
if (texoffset) {
|
TextureHandle = (void *)ImageHeaderArray[texoffset].D3DTexture;
|
||||||
TextureHandle = (void *)ImageHeaderArray[texoffset].D3DTexture;
|
CurrTextureHandle = TextureHandle;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
if (TextureHandle->w == 128) {
|
||||||
|
RecipW = (1.0f / 128.0f) / 65536.0f;
|
||||||
} else {
|
} else {
|
||||||
TextureHandle = CurrTextureHandle;
|
float width = TextureHandle->w;
|
||||||
|
RecipW = (1.0f / width) / 65536.0f;
|
||||||
|
}
|
||||||
|
if (TextureHandle->h == 128) {
|
||||||
|
RecipH = (1.0f / 128.0f) / 65536.0f;
|
||||||
|
} else {
|
||||||
|
float height = TextureHandle->h;
|
||||||
|
RecipH = (1.0f / height) / 65536.0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
CheckTranslucencyModeIsCorrect(RenderPolygon.TranslucencyMode);
|
CheckTranslucencyModeIsCorrect(RenderPolygon.TranslucencyMode);
|
||||||
|
CheckBoundTextureIsCorrect(TextureHandle);
|
||||||
RecipW = (1.0f/65536.0f)/128.0f;
|
|
||||||
RecipH = (1.0f/65536.0f)/128.0f;
|
|
||||||
|
|
||||||
CheckBoundTextureIsCorrect(TextureHandle->id);
|
|
||||||
|
|
||||||
for (i = 0; i < RenderPolygon.NumberOfVertices; i++) {
|
for (i = 0; i < RenderPolygon.NumberOfVertices; i++) {
|
||||||
RENDERVERTEX *vertices = &renderVerticesPtr[i];
|
RENDERVERTEX *vertices = &renderVerticesPtr[i];
|
||||||
|
@ -545,7 +586,7 @@ void D3D_SkyPolygon_Output(POLYHEADER *inputPolyPtr, RENDERVERTEX *renderVertice
|
||||||
|
|
||||||
x1 = (vertices->X*(Global_VDB_Ptr->VDB_ProjX+1))/vertices->Z+Global_VDB_Ptr->VDB_CentreX;
|
x1 = (vertices->X*(Global_VDB_Ptr->VDB_ProjX+1))/vertices->Z+Global_VDB_Ptr->VDB_CentreX;
|
||||||
y1 = (vertices->Y*(Global_VDB_Ptr->VDB_ProjY+1))/vertices->Z+Global_VDB_Ptr->VDB_CentreY;
|
y1 = (vertices->Y*(Global_VDB_Ptr->VDB_ProjY+1))/vertices->Z+Global_VDB_Ptr->VDB_CentreY;
|
||||||
#if 1
|
|
||||||
if (x1<Global_VDB_Ptr->VDB_ClipLeft) {
|
if (x1<Global_VDB_Ptr->VDB_ClipLeft) {
|
||||||
x1=Global_VDB_Ptr->VDB_ClipLeft;
|
x1=Global_VDB_Ptr->VDB_ClipLeft;
|
||||||
} else if (x1>Global_VDB_Ptr->VDB_ClipRight) {
|
} else if (x1>Global_VDB_Ptr->VDB_ClipRight) {
|
||||||
|
@ -557,15 +598,13 @@ void D3D_SkyPolygon_Output(POLYHEADER *inputPolyPtr, RENDERVERTEX *renderVertice
|
||||||
} else if (y1>Global_VDB_Ptr->VDB_ClipDown) {
|
} else if (y1>Global_VDB_Ptr->VDB_ClipDown) {
|
||||||
y1=Global_VDB_Ptr->VDB_ClipDown;
|
y1=Global_VDB_Ptr->VDB_ClipDown;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
x = x1;
|
x = x1;
|
||||||
y = y1;
|
y = y1;
|
||||||
|
|
||||||
x = (x - ScreenDescriptorBlock.SDB_CentreX)/ScreenDescriptorBlock.SDB_CentreX;
|
x = (x - (float)ScreenDescriptorBlock.SDB_CentreX - 0.5f) / ((float)ScreenDescriptorBlock.SDB_CentreX - 0.5f);
|
||||||
y = -(y - ScreenDescriptorBlock.SDB_CentreY)/ScreenDescriptorBlock.SDB_CentreY;
|
y = -(y - (float)ScreenDescriptorBlock.SDB_CentreY - 0.5f) / ((float)ScreenDescriptorBlock.SDB_CentreY - 0.5f);
|
||||||
|
|
||||||
// zvalue = vertices->Z+HeadUpDisplayZOffset;
|
|
||||||
// z = 1.0 - 2*ZNear/zvalue;
|
|
||||||
z = 1.0f;
|
z = 1.0f;
|
||||||
|
|
||||||
tarr.v[4*i+0] = x/rhw;
|
tarr.v[4*i+0] = x/rhw;
|
||||||
|
@ -585,7 +624,7 @@ void D3D_SkyPolygon_Output(POLYHEADER *inputPolyPtr, RENDERVERTEX *renderVertice
|
||||||
tarr.elements = RenderPolygon.NumberOfVertices;
|
tarr.elements = RenderPolygon.NumberOfVertices;
|
||||||
DrawTriangles_T2F_C4UB_V4F();
|
DrawTriangles_T2F_C4UB_V4F();
|
||||||
|
|
||||||
CurrTextureHandle = TextureHandle;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void D3D_ZBufferedCloakedPolygon_Output(POLYHEADER *inputPolyPtr, RENDERVERTEX *renderVerticesPtr)
|
void D3D_ZBufferedCloakedPolygon_Output(POLYHEADER *inputPolyPtr, RENDERVERTEX *renderVerticesPtr)
|
||||||
|
@ -605,7 +644,7 @@ void D3D_ZBufferedCloakedPolygon_Output(POLYHEADER *inputPolyPtr, RENDERVERTEX *
|
||||||
|
|
||||||
TextureHandle = ImageHeaderArray[texoffset].D3DTexture;
|
TextureHandle = ImageHeaderArray[texoffset].D3DTexture;
|
||||||
|
|
||||||
CheckBoundTextureIsCorrect(TextureHandle->id);
|
CheckBoundTextureIsCorrect(TextureHandle);
|
||||||
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_NORMAL);
|
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_NORMAL);
|
||||||
|
|
||||||
if (TextureHandle->w == 128) {
|
if (TextureHandle->w == 128) {
|
||||||
|
@ -639,7 +678,7 @@ void D3D_ZBufferedCloakedPolygon_Output(POLYHEADER *inputPolyPtr, RENDERVERTEX *
|
||||||
|
|
||||||
x1 = (vertices->X*(Global_VDB_Ptr->VDB_ProjX+1))/vertices->Z+Global_VDB_Ptr->VDB_CentreX;
|
x1 = (vertices->X*(Global_VDB_Ptr->VDB_ProjX+1))/vertices->Z+Global_VDB_Ptr->VDB_CentreX;
|
||||||
y1 = (vertices->Y*(Global_VDB_Ptr->VDB_ProjY+1))/vertices->Z+Global_VDB_Ptr->VDB_CentreY;
|
y1 = (vertices->Y*(Global_VDB_Ptr->VDB_ProjY+1))/vertices->Z+Global_VDB_Ptr->VDB_CentreY;
|
||||||
#if 1
|
|
||||||
if (x1<Global_VDB_Ptr->VDB_ClipLeft) {
|
if (x1<Global_VDB_Ptr->VDB_ClipLeft) {
|
||||||
x1=Global_VDB_Ptr->VDB_ClipLeft;
|
x1=Global_VDB_Ptr->VDB_ClipLeft;
|
||||||
} else if (x1>Global_VDB_Ptr->VDB_ClipRight) {
|
} else if (x1>Global_VDB_Ptr->VDB_ClipRight) {
|
||||||
|
@ -651,7 +690,7 @@ void D3D_ZBufferedCloakedPolygon_Output(POLYHEADER *inputPolyPtr, RENDERVERTEX *
|
||||||
} else if (y1>Global_VDB_Ptr->VDB_ClipDown) {
|
} else if (y1>Global_VDB_Ptr->VDB_ClipDown) {
|
||||||
y1=Global_VDB_Ptr->VDB_ClipDown;
|
y1=Global_VDB_Ptr->VDB_ClipDown;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
x = x1;
|
x = x1;
|
||||||
y = y1;
|
y = y1;
|
||||||
|
|
||||||
|
@ -700,7 +739,7 @@ void D3D_Decal_Output(DECAL *decalPtr, RENDERVERTEX *renderVerticesPtr)
|
||||||
/* not (yet) implemented */
|
/* not (yet) implemented */
|
||||||
return;
|
return;
|
||||||
} else if (decalPtr->DecalID == DECAL_SHAFTOFLIGHT||decalPtr->DecalID == DECAL_SHAFTOFLIGHT_OUTER) {
|
} else if (decalPtr->DecalID == DECAL_SHAFTOFLIGHT||decalPtr->DecalID == DECAL_SHAFTOFLIGHT_OUTER) {
|
||||||
CheckBoundTextureIsCorrect(0);
|
CheckBoundTextureIsCorrect(NULL);
|
||||||
|
|
||||||
RecipW = 1.0 / 256.0; /* ignored */
|
RecipW = 1.0 / 256.0; /* ignored */
|
||||||
RecipH = 1.0 / 256.0;
|
RecipH = 1.0 / 256.0;
|
||||||
|
@ -723,7 +762,7 @@ void D3D_Decal_Output(DECAL *decalPtr, RENDERVERTEX *renderVerticesPtr)
|
||||||
RecipH = 1.0 / height;
|
RecipH = 1.0 / height;
|
||||||
}
|
}
|
||||||
|
|
||||||
CheckBoundTextureIsCorrect(TextureHandle->id);
|
CheckBoundTextureIsCorrect(TextureHandle);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (decalDescPtr->IsLit) {
|
if (decalDescPtr->IsLit) {
|
||||||
|
@ -761,7 +800,7 @@ void D3D_Decal_Output(DECAL *decalPtr, RENDERVERTEX *renderVerticesPtr)
|
||||||
|
|
||||||
x1 = (vertices->X*(Global_VDB_Ptr->VDB_ProjX+1))/vertices->Z+Global_VDB_Ptr->VDB_CentreX;
|
x1 = (vertices->X*(Global_VDB_Ptr->VDB_ProjX+1))/vertices->Z+Global_VDB_Ptr->VDB_CentreX;
|
||||||
y1 = (vertices->Y*(Global_VDB_Ptr->VDB_ProjY+1))/vertices->Z+Global_VDB_Ptr->VDB_CentreY;
|
y1 = (vertices->Y*(Global_VDB_Ptr->VDB_ProjY+1))/vertices->Z+Global_VDB_Ptr->VDB_CentreY;
|
||||||
#if 1
|
|
||||||
if (x1<Global_VDB_Ptr->VDB_ClipLeft) {
|
if (x1<Global_VDB_Ptr->VDB_ClipLeft) {
|
||||||
x1=Global_VDB_Ptr->VDB_ClipLeft;
|
x1=Global_VDB_Ptr->VDB_ClipLeft;
|
||||||
} else if (x1>Global_VDB_Ptr->VDB_ClipRight) {
|
} else if (x1>Global_VDB_Ptr->VDB_ClipRight) {
|
||||||
|
@ -773,7 +812,6 @@ void D3D_Decal_Output(DECAL *decalPtr, RENDERVERTEX *renderVerticesPtr)
|
||||||
} else if (y1>Global_VDB_Ptr->VDB_ClipDown) {
|
} else if (y1>Global_VDB_Ptr->VDB_ClipDown) {
|
||||||
y1=Global_VDB_Ptr->VDB_ClipDown;
|
y1=Global_VDB_Ptr->VDB_ClipDown;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
x = x1;
|
x = x1;
|
||||||
y = y1;
|
y = y1;
|
||||||
|
@ -816,7 +854,7 @@ void D3D_Particle_Output(PARTICLE *particlePtr, RENDERVERTEX *renderVerticesPtr)
|
||||||
|
|
||||||
ZNear = (GLfloat) (Global_VDB_Ptr->VDB_ClipZ * GlobalScale);
|
ZNear = (GLfloat) (Global_VDB_Ptr->VDB_ClipZ * GlobalScale);
|
||||||
|
|
||||||
CheckBoundTextureIsCorrect(TextureHandle->id);
|
CheckBoundTextureIsCorrect(TextureHandle);
|
||||||
CheckTranslucencyModeIsCorrect(particleDescPtr->TranslucencyType);
|
CheckTranslucencyModeIsCorrect(particleDescPtr->TranslucencyType);
|
||||||
|
|
||||||
// if(ImageHeaderArray[texoffset].ImageWidth==256) {
|
// if(ImageHeaderArray[texoffset].ImageWidth==256) {
|
||||||
|
@ -881,7 +919,6 @@ void D3D_Particle_Output(PARTICLE *particlePtr, RENDERVERTEX *renderVerticesPtr)
|
||||||
glColor4ub(FastRandom()&255, FastRandom()&255, FastRandom()&255, particleDescPtr->Alpha);
|
glColor4ub(FastRandom()&255, FastRandom()&255, FastRandom()&255, particleDescPtr->Alpha);
|
||||||
}
|
}
|
||||||
|
|
||||||
// SelectPolygonBeginType(RenderPolygon.NumberOfVertices);
|
|
||||||
for (i = 0; i < RenderPolygon.NumberOfVertices; i++) {
|
for (i = 0; i < RenderPolygon.NumberOfVertices; i++) {
|
||||||
RENDERVERTEX *vertices = &renderVerticesPtr[i];
|
RENDERVERTEX *vertices = &renderVerticesPtr[i];
|
||||||
|
|
||||||
|
@ -897,7 +934,6 @@ void D3D_Particle_Output(PARTICLE *particlePtr, RENDERVERTEX *renderVerticesPtr)
|
||||||
x1 = (vertices->X*(Global_VDB_Ptr->VDB_ProjX+1))/vertices->Z+Global_VDB_Ptr->VDB_CentreX;
|
x1 = (vertices->X*(Global_VDB_Ptr->VDB_ProjX+1))/vertices->Z+Global_VDB_Ptr->VDB_CentreX;
|
||||||
y1 = (vertices->Y*(Global_VDB_Ptr->VDB_ProjY+1))/vertices->Z+Global_VDB_Ptr->VDB_CentreY;
|
y1 = (vertices->Y*(Global_VDB_Ptr->VDB_ProjY+1))/vertices->Z+Global_VDB_Ptr->VDB_CentreY;
|
||||||
|
|
||||||
#if 1
|
|
||||||
if (x1<Global_VDB_Ptr->VDB_ClipLeft) {
|
if (x1<Global_VDB_Ptr->VDB_ClipLeft) {
|
||||||
x1=Global_VDB_Ptr->VDB_ClipLeft;
|
x1=Global_VDB_Ptr->VDB_ClipLeft;
|
||||||
} else if (x1>Global_VDB_Ptr->VDB_ClipRight) {
|
} else if (x1>Global_VDB_Ptr->VDB_ClipRight) {
|
||||||
|
@ -909,7 +945,6 @@ void D3D_Particle_Output(PARTICLE *particlePtr, RENDERVERTEX *renderVerticesPtr)
|
||||||
} else if (y1>Global_VDB_Ptr->VDB_ClipDown) {
|
} else if (y1>Global_VDB_Ptr->VDB_ClipDown) {
|
||||||
y1=Global_VDB_Ptr->VDB_ClipDown;
|
y1=Global_VDB_Ptr->VDB_ClipDown;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
x = x1;
|
x = x1;
|
||||||
y = y1;
|
y = y1;
|
||||||
|
@ -925,15 +960,6 @@ void D3D_Particle_Output(PARTICLE *particlePtr, RENDERVERTEX *renderVerticesPtr)
|
||||||
z = 1.0 - 2.0*ZNear/((float)vertices->Z); /* currently maps [ZNear, inf) to [-1, 1], probably could be more precise with a ZFar */
|
z = 1.0 - 2.0*ZNear/((float)vertices->Z); /* currently maps [ZNear, inf) to [-1, 1], probably could be more precise with a ZFar */
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
#if 0
|
|
||||||
glTexCoord4f(s*rhw, t*rhw, 0, rhw);
|
|
||||||
glVertex3f(x, y, z);
|
|
||||||
#else
|
|
||||||
glTexCoord2f(s, t);
|
|
||||||
glVertex4f(x/rhw, y/rhw, z/rhw, 1/rhw);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
tarr.v[4*i+0] = x/rhw;
|
tarr.v[4*i+0] = x/rhw;
|
||||||
tarr.v[4*i+1] = y/rhw;
|
tarr.v[4*i+1] = y/rhw;
|
||||||
tarr.v[4*i+2] = z/rhw;
|
tarr.v[4*i+2] = z/rhw;
|
||||||
|
@ -942,7 +968,6 @@ void D3D_Particle_Output(PARTICLE *particlePtr, RENDERVERTEX *renderVerticesPtr)
|
||||||
tarr.t[4*i+0] = s;
|
tarr.t[4*i+0] = s;
|
||||||
tarr.t[4*i+1] = t;
|
tarr.t[4*i+1] = t;
|
||||||
}
|
}
|
||||||
// glEnd();
|
|
||||||
|
|
||||||
tarr.elements = RenderPolygon.NumberOfVertices;
|
tarr.elements = RenderPolygon.NumberOfVertices;
|
||||||
DrawTriangles_T2F_V4F();
|
DrawTriangles_T2F_V4F();
|
||||||
|
@ -954,7 +979,7 @@ void D3D_PredatorThermalVisionPolygon_Output(POLYHEADER *inputPolyPtr, RENDERVER
|
||||||
int i;
|
int i;
|
||||||
ZNear = (float) (Global_VDB_Ptr->VDB_ClipZ * GlobalScale);
|
ZNear = (float) (Global_VDB_Ptr->VDB_ClipZ * GlobalScale);
|
||||||
|
|
||||||
CheckBoundTextureIsCorrect(0); /* disable texturing */
|
CheckBoundTextureIsCorrect(NULL); /* disable texturing */
|
||||||
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_OFF);
|
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_OFF);
|
||||||
|
|
||||||
SelectPolygonBeginType(RenderPolygon.NumberOfVertices);
|
SelectPolygonBeginType(RenderPolygon.NumberOfVertices);
|
||||||
|
@ -1011,7 +1036,7 @@ void D3D_ZBufferedGouraudPolygon_Output(POLYHEADER *inputPolyPtr, RENDERVERTEX *
|
||||||
flags = inputPolyPtr->PolyFlags;
|
flags = inputPolyPtr->PolyFlags;
|
||||||
|
|
||||||
CheckTranslucencyModeIsCorrect(RenderPolygon.TranslucencyMode);
|
CheckTranslucencyModeIsCorrect(RenderPolygon.TranslucencyMode);
|
||||||
CheckBoundTextureIsCorrect(0);
|
CheckBoundTextureIsCorrect(NULL);
|
||||||
|
|
||||||
SelectPolygonBeginType(RenderPolygon.NumberOfVertices);
|
SelectPolygonBeginType(RenderPolygon.NumberOfVertices);
|
||||||
for (i = 0; i < RenderPolygon.NumberOfVertices; i++) {
|
for (i = 0; i < RenderPolygon.NumberOfVertices; i++) {
|
||||||
|
@ -1067,17 +1092,17 @@ void D3D_PlayerOnFireOverlay()
|
||||||
GLfloat x[4], y[4], s[4], t[4];
|
GLfloat x[4], y[4], s[4], t[4];
|
||||||
float u, v;
|
float u, v;
|
||||||
int r, g, b, a;
|
int r, g, b, a;
|
||||||
D3DTexture *tex;
|
D3DTexture *TextureHandle;
|
||||||
|
|
||||||
b = (colour >> 0) & 0xFF;
|
b = (colour >> 0) & 0xFF;
|
||||||
g = (colour >> 8) & 0xFF;
|
g = (colour >> 8) & 0xFF;
|
||||||
r = (colour >> 16) & 0xFF;
|
r = (colour >> 16) & 0xFF;
|
||||||
a = (colour >> 24) & 0xFF;
|
a = (colour >> 24) & 0xFF;
|
||||||
|
|
||||||
tex = ImageHeaderArray[BurningImageNumber].D3DTexture;
|
TextureHandle = ImageHeaderArray[BurningImageNumber].D3DTexture;
|
||||||
|
|
||||||
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_GLOWING);
|
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_GLOWING);
|
||||||
CheckBoundTextureIsCorrect(tex->id);
|
CheckBoundTextureIsCorrect(TextureHandle);
|
||||||
CheckFilteringModeIsCorrect(FILTERING_BILINEAR_ON);
|
CheckFilteringModeIsCorrect(FILTERING_BILINEAR_ON);
|
||||||
|
|
||||||
glColor4ub(r, g, b, a);
|
glColor4ub(r, g, b, a);
|
||||||
|
@ -1123,7 +1148,7 @@ void D3D_PlayerOnFireOverlay()
|
||||||
|
|
||||||
void D3D_PlayerDamagedOverlay(int intensity)
|
void D3D_PlayerDamagedOverlay(int intensity)
|
||||||
{
|
{
|
||||||
D3DTexture *tex;
|
D3DTexture *TextureHandle;
|
||||||
int theta[2];
|
int theta[2];
|
||||||
int colour, baseColour;
|
int colour, baseColour;
|
||||||
int r, g, b, a;
|
int r, g, b, a;
|
||||||
|
@ -1132,7 +1157,7 @@ void D3D_PlayerDamagedOverlay(int intensity)
|
||||||
theta[0] = (CloakingPhase/8)&4095;
|
theta[0] = (CloakingPhase/8)&4095;
|
||||||
theta[1] = (800-CloakingPhase/8)&4095;
|
theta[1] = (800-CloakingPhase/8)&4095;
|
||||||
|
|
||||||
tex = ImageHeaderArray[SpecialFXImageNumber].D3DTexture;
|
TextureHandle = ImageHeaderArray[SpecialFXImageNumber].D3DTexture;
|
||||||
switch(AvP.PlayerType) {
|
switch(AvP.PlayerType) {
|
||||||
default:
|
default:
|
||||||
// LOCALASSERT(0);
|
// LOCALASSERT(0);
|
||||||
|
@ -1147,7 +1172,7 @@ void D3D_PlayerDamagedOverlay(int intensity)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
CheckBoundTextureIsCorrect(tex->id);
|
CheckBoundTextureIsCorrect(TextureHandle);
|
||||||
CheckFilteringModeIsCorrect(FILTERING_BILINEAR_ON);
|
CheckFilteringModeIsCorrect(FILTERING_BILINEAR_ON);
|
||||||
|
|
||||||
colour = 0xffffff - baseColour + (intensity<<24);
|
colour = 0xffffff - baseColour + (intensity<<24);
|
||||||
|
@ -1230,7 +1255,7 @@ void DrawNoiseOverlay(int tr)
|
||||||
tex = ImageHeaderArray[StaticImageNumber].D3DTexture;
|
tex = ImageHeaderArray[StaticImageNumber].D3DTexture;
|
||||||
|
|
||||||
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_GLOWING);
|
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_GLOWING);
|
||||||
CheckBoundTextureIsCorrect(tex->id);
|
CheckBoundTextureIsCorrect(tex);
|
||||||
CheckFilteringModeIsCorrect(FILTERING_BILINEAR_ON);
|
CheckFilteringModeIsCorrect(FILTERING_BILINEAR_ON);
|
||||||
glDepthFunc(GL_ALWAYS);
|
glDepthFunc(GL_ALWAYS);
|
||||||
|
|
||||||
|
@ -1288,7 +1313,7 @@ void D3D_ScreenInversionOverlay()
|
||||||
tex = ImageHeaderArray[SpecialFXImageNumber].D3DTexture;
|
tex = ImageHeaderArray[SpecialFXImageNumber].D3DTexture;
|
||||||
|
|
||||||
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_DARKENINGCOLOUR);
|
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_DARKENINGCOLOUR);
|
||||||
CheckBoundTextureIsCorrect(tex->id);
|
CheckBoundTextureIsCorrect(tex);
|
||||||
CheckFilteringModeIsCorrect(FILTERING_BILINEAR_ON);
|
CheckFilteringModeIsCorrect(FILTERING_BILINEAR_ON);
|
||||||
|
|
||||||
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
|
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
|
||||||
|
@ -1341,7 +1366,7 @@ void D3D_ScreenInversionOverlay()
|
||||||
void D3D_PredatorScreenInversionOverlay()
|
void D3D_PredatorScreenInversionOverlay()
|
||||||
{
|
{
|
||||||
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_DARKENINGCOLOUR);
|
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_DARKENINGCOLOUR);
|
||||||
CheckBoundTextureIsCorrect(0);
|
CheckBoundTextureIsCorrect(NULL);
|
||||||
glDepthFunc(GL_ALWAYS);
|
glDepthFunc(GL_ALWAYS);
|
||||||
|
|
||||||
SelectPolygonBeginType(3); /* triangles */
|
SelectPolygonBeginType(3); /* triangles */
|
||||||
|
@ -1371,7 +1396,7 @@ void DrawScanlinesOverlay(float level)
|
||||||
tex = ImageHeaderArray[PredatorNumbersImageNumber].D3DTexture;
|
tex = ImageHeaderArray[PredatorNumbersImageNumber].D3DTexture;
|
||||||
|
|
||||||
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_NORMAL);
|
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_NORMAL);
|
||||||
CheckBoundTextureIsCorrect(tex->id);
|
CheckBoundTextureIsCorrect(tex);
|
||||||
CheckFilteringModeIsCorrect(FILTERING_BILINEAR_ON);
|
CheckFilteringModeIsCorrect(FILTERING_BILINEAR_ON);
|
||||||
glDepthFunc(GL_ALWAYS);
|
glDepthFunc(GL_ALWAYS);
|
||||||
|
|
||||||
|
@ -1430,7 +1455,7 @@ void D3D_FadeDownScreen(int brightness, int colour)
|
||||||
colour = (t<<24)+colour;
|
colour = (t<<24)+colour;
|
||||||
|
|
||||||
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_NORMAL);
|
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_NORMAL);
|
||||||
CheckBoundTextureIsCorrect(0);
|
CheckBoundTextureIsCorrect(NULL);
|
||||||
|
|
||||||
b = (colour >> 0) & 0xFF;
|
b = (colour >> 0) & 0xFF;
|
||||||
g = (colour >> 8) & 0xFF;
|
g = (colour >> 8) & 0xFF;
|
||||||
|
@ -1479,7 +1504,7 @@ void D3D_HUDQuad_Output(int imageNumber, struct VertexTag *quadVerticesPtr, unsi
|
||||||
/* possibly use polygon offset? (predator hud) */
|
/* possibly use polygon offset? (predator hud) */
|
||||||
|
|
||||||
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_GLOWING);
|
CheckTranslucencyModeIsCorrect(TRANSLUCENCY_GLOWING);
|
||||||
CheckBoundTextureIsCorrect(tex->id);
|
CheckBoundTextureIsCorrect(tex);
|
||||||
|
|
||||||
if (tex->w == 128) {
|
if (tex->w == 128) {
|
||||||
RecipW = 1.0f / 128.0f;
|
RecipW = 1.0f / 128.0f;
|
||||||
|
|
|
@ -10,7 +10,8 @@ typedef struct DIRECTDRAWSURFACE
|
||||||
|
|
||||||
int w;
|
int w;
|
||||||
int h;
|
int h;
|
||||||
unsigned char *data;
|
|
||||||
|
int filter;
|
||||||
} DIRECTDRAWSURFACE;
|
} DIRECTDRAWSURFACE;
|
||||||
|
|
||||||
typedef DIRECTDRAWSURFACE * LPDIRECTDRAWSURFACE;
|
typedef DIRECTDRAWSURFACE * LPDIRECTDRAWSURFACE;
|
||||||
|
@ -22,17 +23,13 @@ typedef struct DIRECT3DTEXTURE
|
||||||
|
|
||||||
int w;
|
int w;
|
||||||
int h;
|
int h;
|
||||||
unsigned char *data;
|
|
||||||
|
int filter;
|
||||||
} DIRECT3DTEXTURE;
|
} DIRECT3DTEXTURE;
|
||||||
|
|
||||||
typedef DIRECT3DTEXTURE * LPDIRECT3DTEXTURE;
|
typedef DIRECT3DTEXTURE * LPDIRECT3DTEXTURE;
|
||||||
typedef DIRECT3DTEXTURE D3DTexture;
|
typedef DIRECT3DTEXTURE D3DTexture;
|
||||||
|
|
||||||
//typedef struct D3DTEXTUREHANDLE
|
|
||||||
//{
|
|
||||||
// int x;
|
|
||||||
//} D3DTEXTUREHANDLE;
|
|
||||||
|
|
||||||
typedef int D3DTEXTUREHANDLE;
|
typedef int D3DTEXTUREHANDLE;
|
||||||
|
|
||||||
#endif /* _INCLUDED_AW_H_ */
|
#endif /* _INCLUDED_AW_H_ */
|
||||||
|
|
|
@ -571,7 +571,6 @@ AwTl::SurfUnion AwBackupTexture::CreateTexture(AwTl::CreateTextureParms const &
|
||||||
/* temp junk */
|
/* temp junk */
|
||||||
Tex->w = m_nWidth;
|
Tex->w = m_nWidth;
|
||||||
Tex->h = m_nHeight;
|
Tex->h = m_nHeight;
|
||||||
Tex->data = NULL;
|
|
||||||
CreateOGLTexture(Tex, buf); /* this will set the id */
|
CreateOGLTexture(Tex, buf); /* this will set the id */
|
||||||
free(buf);
|
free(buf);
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue