mirror of
https://github.com/DrBeef/JKXR.git
synced 2024-12-01 08:31:53 +00:00
More fixes to try and build
This commit is contained in:
parent
bdb808b3f8
commit
c1cc1097f5
18 changed files with 361 additions and 127 deletions
|
@ -26,7 +26,7 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||||
#include "../rd-common/tr_public.h"
|
#include "../rd-common/tr_public.h"
|
||||||
#include "../rd-common/tr_font.h"
|
#include "../rd-common/tr_font.h"
|
||||||
|
|
||||||
extern refimport_t ri;
|
//extern refimport_t *ri;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
================================================================================
|
================================================================================
|
||||||
|
|
|
@ -29,6 +29,9 @@
|
||||||
#ifdef HAVE_GLES
|
#ifdef HAVE_GLES
|
||||||
#include <GLES/gl.h>
|
#include <GLES/gl.h>
|
||||||
#include <EGL/egl.h>
|
#include <EGL/egl.h>
|
||||||
|
|
||||||
|
#define GL_TEXTURE_MAX_ANISOTROPY_EXT 0x84FE
|
||||||
|
#define GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT 0x84FF
|
||||||
#else
|
#else
|
||||||
#include <GL/gl.h>
|
#include <GL/gl.h>
|
||||||
#include <GL/glx.h>
|
#include <GL/glx.h>
|
||||||
|
|
|
@ -483,7 +483,7 @@ static void RB_BeginDrawingView (void) {
|
||||||
clearBits |= GL_COLOR_BUFFER_BIT;
|
clearBits |= GL_COLOR_BUFFER_BIT;
|
||||||
if (tr.world && tr.world->globalFog != -1)
|
if (tr.world && tr.world->globalFog != -1)
|
||||||
{
|
{
|
||||||
const fog_t *fog = &tr.world->fogs[tr.world->globalFog];
|
const jk_fog_t *fog = &tr.world->fogs[tr.world->globalFog];
|
||||||
qglClearColor(fog->parms.color[0], fog->parms.color[1], fog->parms.color[2], 1.0f );
|
qglClearColor(fog->parms.color[0], fog->parms.color[1], fog->parms.color[2], 1.0f );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -499,7 +499,7 @@ static void RB_BeginDrawingView (void) {
|
||||||
{
|
{
|
||||||
if (tr.world && tr.world->globalFog != -1)
|
if (tr.world && tr.world->globalFog != -1)
|
||||||
{
|
{
|
||||||
const fog_t *fog = &tr.world->fogs[tr.world->globalFog];
|
const jk_fog_t *fog = &tr.world->fogs[tr.world->globalFog];
|
||||||
qglClearColor(fog->parms.color[0], fog->parms.color[1], fog->parms.color[2], 1.0f );
|
qglClearColor(fog->parms.color[0], fog->parms.color[1], fog->parms.color[2], 1.0f );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -514,7 +514,7 @@ static void RB_BeginDrawingView (void) {
|
||||||
{
|
{
|
||||||
if (tr.world && tr.world->globalFog != -1)
|
if (tr.world && tr.world->globalFog != -1)
|
||||||
{ //this is because of a bug in multiple scenes I think, it needs to clear for the second scene but it doesn't normally.
|
{ //this is because of a bug in multiple scenes I think, it needs to clear for the second scene but it doesn't normally.
|
||||||
const fog_t *fog = &tr.world->fogs[tr.world->globalFog];
|
const jk_fog_t *fog = &tr.world->fogs[tr.world->globalFog];
|
||||||
|
|
||||||
qglClearColor(fog->parms.color[0], fog->parms.color[1], fog->parms.color[2], 1.0f );
|
qglClearColor(fog->parms.color[0], fog->parms.color[1], fog->parms.color[2], 1.0f );
|
||||||
clearBits |= GL_COLOR_BUFFER_BIT;
|
clearBits |= GL_COLOR_BUFFER_BIT;
|
||||||
|
@ -550,7 +550,11 @@ static void RB_BeginDrawingView (void) {
|
||||||
// clip to the plane of the portal
|
// clip to the plane of the portal
|
||||||
if ( backEnd.viewParms.isPortal ) {
|
if ( backEnd.viewParms.isPortal ) {
|
||||||
float plane[4];
|
float plane[4];
|
||||||
|
#ifdef HAVE_GLES
|
||||||
|
float plane2[4];
|
||||||
|
#else
|
||||||
double plane2[4];
|
double plane2[4];
|
||||||
|
#endif
|
||||||
|
|
||||||
plane[0] = backEnd.viewParms.portalPlane.normal[0];
|
plane[0] = backEnd.viewParms.portalPlane.normal[0];
|
||||||
plane[1] = backEnd.viewParms.portalPlane.normal[1];
|
plane[1] = backEnd.viewParms.portalPlane.normal[1];
|
||||||
|
@ -924,7 +928,11 @@ void RB_RenderDrawSurfList( drawSurf_t *drawSurfs, int numDrawSurfs ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
//now copy a portion of the screen to this texture
|
//now copy a portion of the screen to this texture
|
||||||
|
#ifdef HAVE_GLES
|
||||||
|
qglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, cX, cY, rad, rad, 0);
|
||||||
|
#else
|
||||||
qglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16, cX, cY, rad, rad, 0);
|
qglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16, cX, cY, rad, rad, 0);
|
||||||
|
#endif
|
||||||
|
|
||||||
lastPostEnt = pRender->entNum;
|
lastPostEnt = pRender->entNum;
|
||||||
}
|
}
|
||||||
|
@ -1333,6 +1341,7 @@ const void *RB_DrawSurfs( const void *data ) {
|
||||||
combiner (pixel shader), I combine the adjacent pixels using a weighting factor. - Aurelio
|
combiner (pixel shader), I combine the adjacent pixels using a weighting factor. - Aurelio
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#ifndef HAVE_GLES
|
||||||
// Render dynamic glowing/flaring objects.
|
// Render dynamic glowing/flaring objects.
|
||||||
if ( !(backEnd.refdef.rdflags & RDF_NOWORLDMODEL) && g_bDynamicGlowSupported && r_DynamicGlow->integer )
|
if ( !(backEnd.refdef.rdflags & RDF_NOWORLDMODEL) && g_bDynamicGlowSupported && r_DynamicGlow->integer )
|
||||||
{
|
{
|
||||||
|
@ -1389,6 +1398,7 @@ const void *RB_DrawSurfs( const void *data ) {
|
||||||
// Draw the glow additively over the screen.
|
// Draw the glow additively over the screen.
|
||||||
RB_DrawGlowOverlay();
|
RB_DrawGlowOverlay();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
return (const void *)(cmd + 1);
|
return (const void *)(cmd + 1);
|
||||||
}
|
}
|
||||||
|
@ -1405,19 +1415,21 @@ const void *RB_DrawBuffer( const void *data ) {
|
||||||
|
|
||||||
cmd = (const drawBufferCommand_t *)data;
|
cmd = (const drawBufferCommand_t *)data;
|
||||||
|
|
||||||
|
#ifndef HAVE_GLES
|
||||||
qglDrawBuffer( cmd->buffer );
|
qglDrawBuffer( cmd->buffer );
|
||||||
|
#endif
|
||||||
|
|
||||||
// clear screen for debugging
|
// clear screen for debugging
|
||||||
if (!( backEnd.refdef.rdflags & RDF_NOWORLDMODEL ) && tr.world && tr.refdef.rdflags & RDF_doLAGoggles)
|
if (!( backEnd.refdef.rdflags & RDF_NOWORLDMODEL ) && tr.world && tr.refdef.rdflags & RDF_doLAGoggles)
|
||||||
{
|
{
|
||||||
const fog_t *fog = &tr.world->fogs[tr.world->numfogs];
|
const jk_fog_t *fog = &tr.world->fogs[tr.world->numfogs];
|
||||||
|
|
||||||
qglClearColor(fog->parms.color[0], fog->parms.color[1], fog->parms.color[2], 1.0f );
|
qglClearColor(fog->parms.color[0], fog->parms.color[1], fog->parms.color[2], 1.0f );
|
||||||
qglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
qglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
}
|
}
|
||||||
else if (!( backEnd.refdef.rdflags & RDF_NOWORLDMODEL ) && tr.world && tr.world->globalFog != -1 && tr.sceneCount)//don't clear during menus, wait for real scene
|
else if (!( backEnd.refdef.rdflags & RDF_NOWORLDMODEL ) && tr.world && tr.world->globalFog != -1 && tr.sceneCount)//don't clear during menus, wait for real scene
|
||||||
{
|
{
|
||||||
const fog_t *fog = &tr.world->fogs[tr.world->globalFog];
|
const jk_fog_t *fog = &tr.world->fogs[tr.world->globalFog];
|
||||||
|
|
||||||
qglClearColor(fog->parms.color[0], fog->parms.color[1], fog->parms.color[2], 1.0f );
|
qglClearColor(fog->parms.color[0], fog->parms.color[1], fog->parms.color[2], 1.0f );
|
||||||
qglClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
|
qglClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
|
||||||
|
@ -1477,19 +1489,29 @@ Also called by RE_EndRegistration
|
||||||
void RB_ShowImages( void ) {
|
void RB_ShowImages( void ) {
|
||||||
image_t *image;
|
image_t *image;
|
||||||
float x, y, w, h;
|
float x, y, w, h;
|
||||||
//int start, end;
|
// int start, end;
|
||||||
|
|
||||||
if ( !backEnd.projection2D ) {
|
if ( !backEnd.projection2D ) {
|
||||||
RB_SetGL2D();
|
RB_SetGL2D();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qglClear( GL_COLOR_BUFFER_BIT );
|
||||||
|
|
||||||
qglFinish();
|
qglFinish();
|
||||||
|
|
||||||
//start = ri.Milliseconds();
|
// start = ri->Milliseconds()*ri->Cvar_VariableValue( "timescale" );
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef HAVE_GLES
|
||||||
|
GLboolean text = qglIsEnabled(GL_TEXTURE_COORD_ARRAY);
|
||||||
|
GLboolean glcol = qglIsEnabled(GL_COLOR_ARRAY);
|
||||||
|
if (glcol)
|
||||||
|
qglDisableClientState(GL_COLOR_ARRAY);
|
||||||
|
if (!text)
|
||||||
|
qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
|
||||||
|
#endif
|
||||||
int i=0;
|
int i=0;
|
||||||
// int iNumImages =
|
R_Images_StartIteration();
|
||||||
R_Images_StartIteration();
|
|
||||||
while ( (image = R_Images_GetNextIteration()) != NULL)
|
while ( (image = R_Images_GetNextIteration()) != NULL)
|
||||||
{
|
{
|
||||||
w = glConfig.vidWidth / 20;
|
w = glConfig.vidWidth / 20;
|
||||||
|
@ -1504,23 +1526,48 @@ void RB_ShowImages( void ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
GL_Bind( image );
|
GL_Bind( image );
|
||||||
|
|
||||||
|
#ifdef HAVE_GLES
|
||||||
|
GLfloat tex[] = {
|
||||||
|
0, 0,
|
||||||
|
1, 0,
|
||||||
|
1, 1,
|
||||||
|
0, 1
|
||||||
|
};
|
||||||
|
GLfloat vtx[] = {
|
||||||
|
x, y,
|
||||||
|
x + w, y,
|
||||||
|
x + w, y + h,
|
||||||
|
x, y + h
|
||||||
|
};
|
||||||
|
qglTexCoordPointer( 2, GL_FLOAT, 0, tex );
|
||||||
|
qglVertexPointer ( 2, GL_FLOAT, 0, vtx );
|
||||||
|
qglDrawArrays( GL_TRIANGLE_FAN, 0, 4 );
|
||||||
|
#else
|
||||||
qglBegin (GL_QUADS);
|
qglBegin (GL_QUADS);
|
||||||
qglTexCoord2f( 0, 0 );
|
qglTexCoord2f( 0, 0 );
|
||||||
qglVertex2f( x, y );
|
qglVertex2f( x, y );
|
||||||
qglTexCoord2f( 1, 0 );
|
qglTexCoord2f( 1, 0 );
|
||||||
qglVertex2f( x + w, y );
|
qglVertex2f( x + w, y );
|
||||||
qglTexCoord2f( 1, 1 );
|
qglTexCoord2f( 1, 1 );
|
||||||
qglVertex2f( x + w, y + h );
|
qglVertex2f( x + w, y + h );
|
||||||
qglTexCoord2f( 0, 1 );
|
qglTexCoord2f( 0, 1 );
|
||||||
qglVertex2f( x, y + h );
|
qglVertex2f( x, y + h );
|
||||||
qglEnd();
|
qglEnd();
|
||||||
|
#endif
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_GLES
|
||||||
|
if (glcol)
|
||||||
|
qglEnableClientState(GL_COLOR_ARRAY);
|
||||||
|
if (!text)
|
||||||
|
qglDisableClientState( GL_TEXTURE_COORD_ARRAY );
|
||||||
|
#endif
|
||||||
qglFinish();
|
qglFinish();
|
||||||
|
|
||||||
//end = ri.Milliseconds();
|
// end = ri->Milliseconds()*ri->Cvar_VariableValue( "timescale" );
|
||||||
//ri.Printf( PRINT_ALL, "%i msec to draw all images\n", end - start );
|
// ri->Printf( PRINT_ALL, "%i msec to draw all images\n", end - start );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1548,12 +1595,13 @@ const void *RB_SwapBuffers( const void *data ) {
|
||||||
|
|
||||||
// we measure overdraw by reading back the stencil buffer and
|
// we measure overdraw by reading back the stencil buffer and
|
||||||
// counting up the number of increments that have happened
|
// counting up the number of increments that have happened
|
||||||
|
#ifndef HAVE_GLES
|
||||||
if ( r_measureOverdraw->integer ) {
|
if ( r_measureOverdraw->integer ) {
|
||||||
int i;
|
int i;
|
||||||
long sum = 0;
|
long sum = 0;
|
||||||
unsigned char *stencilReadback;
|
unsigned char *stencilReadback;
|
||||||
|
|
||||||
stencilReadback = (unsigned char *) R_Malloc( glConfig.vidWidth * glConfig.vidHeight, TAG_TEMP_WORKSPACE, qfalse );
|
stencilReadback = (unsigned char *)Hunk_AllocateTempMemory( glConfig.vidWidth * glConfig.vidHeight );
|
||||||
qglReadPixels( 0, 0, glConfig.vidWidth, glConfig.vidHeight, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, stencilReadback );
|
qglReadPixels( 0, 0, glConfig.vidWidth, glConfig.vidHeight, GL_STENCIL_INDEX, GL_UNSIGNED_BYTE, stencilReadback );
|
||||||
|
|
||||||
for ( i = 0; i < glConfig.vidWidth * glConfig.vidHeight; i++ ) {
|
for ( i = 0; i < glConfig.vidWidth * glConfig.vidHeight; i++ ) {
|
||||||
|
@ -1561,8 +1609,9 @@ const void *RB_SwapBuffers( const void *data ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
backEnd.pc.c_overDraw += sum;
|
backEnd.pc.c_overDraw += sum;
|
||||||
R_Free( stencilReadback );
|
Hunk_FreeTempMemory( stencilReadback );
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if ( !glState.finishCalled ) {
|
if ( !glState.finishCalled ) {
|
||||||
qglFinish();
|
qglFinish();
|
||||||
|
@ -1650,6 +1699,7 @@ void RB_ExecuteRenderCommands( const void *data ) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef HAVE_GLES
|
||||||
// What Pixel Shader type is currently active (regcoms or fragment programs).
|
// What Pixel Shader type is currently active (regcoms or fragment programs).
|
||||||
GLuint g_uiCurrentPixelShaderType = 0x0;
|
GLuint g_uiCurrentPixelShaderType = 0x0;
|
||||||
|
|
||||||
|
@ -1671,9 +1721,9 @@ void BeginPixelShader( GLuint uiType, GLuint uiID )
|
||||||
|
|
||||||
g_uiCurrentPixelShaderType = GL_REGISTER_COMBINERS_NV;
|
g_uiCurrentPixelShaderType = GL_REGISTER_COMBINERS_NV;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// Using Fragment Programs, so call the program.
|
// Using Fragment Programs, so call the program.
|
||||||
case GL_FRAGMENT_PROGRAM_ARB:
|
case GL_FRAGMENT_PROGRAM_ARB:
|
||||||
{
|
{
|
||||||
// Just in case...
|
// Just in case...
|
||||||
|
@ -1685,7 +1735,7 @@ void BeginPixelShader( GLuint uiType, GLuint uiID )
|
||||||
|
|
||||||
g_uiCurrentPixelShaderType = GL_FRAGMENT_PROGRAM_ARB;
|
g_uiCurrentPixelShaderType = GL_FRAGMENT_PROGRAM_ARB;
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1706,6 +1756,7 @@ static inline void RB_BlurGlowTexture()
|
||||||
{
|
{
|
||||||
qglDisable (GL_CLIP_PLANE0);
|
qglDisable (GL_CLIP_PLANE0);
|
||||||
GL_Cull( CT_TWO_SIDED );
|
GL_Cull( CT_TWO_SIDED );
|
||||||
|
qglDisable( GL_DEPTH_TEST );
|
||||||
|
|
||||||
// Go into orthographic 2d mode.
|
// Go into orthographic 2d mode.
|
||||||
qglMatrixMode(GL_PROJECTION);
|
qglMatrixMode(GL_PROJECTION);
|
||||||
|
@ -1716,7 +1767,7 @@ static inline void RB_BlurGlowTexture()
|
||||||
qglPushMatrix();
|
qglPushMatrix();
|
||||||
qglLoadIdentity();
|
qglLoadIdentity();
|
||||||
|
|
||||||
GL_State(GLS_DEPTHTEST_DISABLE);
|
GL_State(0);
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////
|
||||||
// Setup vertex and pixel programs.
|
// Setup vertex and pixel programs.
|
||||||
|
@ -1757,21 +1808,21 @@ static inline void RB_BlurGlowTexture()
|
||||||
GLuint uiTex = tr.screenGlow;
|
GLuint uiTex = tr.screenGlow;
|
||||||
|
|
||||||
qglActiveTextureARB( GL_TEXTURE3_ARB );
|
qglActiveTextureARB( GL_TEXTURE3_ARB );
|
||||||
qglEnable( GL_TEXTURE_RECTANGLE_ARB );
|
qglEnable( GL_TEXTURE_RECTANGLE_EXT );
|
||||||
qglBindTexture( GL_TEXTURE_RECTANGLE_ARB, uiTex );
|
qglBindTexture( GL_TEXTURE_RECTANGLE_EXT, uiTex );
|
||||||
|
|
||||||
qglActiveTextureARB( GL_TEXTURE2_ARB );
|
qglActiveTextureARB( GL_TEXTURE2_ARB );
|
||||||
qglEnable( GL_TEXTURE_RECTANGLE_ARB );
|
qglEnable( GL_TEXTURE_RECTANGLE_EXT );
|
||||||
qglBindTexture( GL_TEXTURE_RECTANGLE_ARB, uiTex );
|
qglBindTexture( GL_TEXTURE_RECTANGLE_EXT, uiTex );
|
||||||
|
|
||||||
qglActiveTextureARB( GL_TEXTURE1_ARB );
|
qglActiveTextureARB( GL_TEXTURE1_ARB );
|
||||||
qglEnable( GL_TEXTURE_RECTANGLE_ARB );
|
qglEnable( GL_TEXTURE_RECTANGLE_EXT );
|
||||||
qglBindTexture( GL_TEXTURE_RECTANGLE_ARB, uiTex );
|
qglBindTexture( GL_TEXTURE_RECTANGLE_EXT, uiTex );
|
||||||
|
|
||||||
qglActiveTextureARB(GL_TEXTURE0_ARB );
|
qglActiveTextureARB(GL_TEXTURE0_ARB );
|
||||||
qglDisable( GL_TEXTURE_2D );
|
qglDisable( GL_TEXTURE_2D );
|
||||||
qglEnable( GL_TEXTURE_RECTANGLE_ARB );
|
qglEnable( GL_TEXTURE_RECTANGLE_EXT );
|
||||||
qglBindTexture( GL_TEXTURE_RECTANGLE_ARB, uiTex );
|
qglBindTexture( GL_TEXTURE_RECTANGLE_EXT, uiTex );
|
||||||
|
|
||||||
/////////////////////////////////////////////////////////
|
/////////////////////////////////////////////////////////
|
||||||
// Draw the blur passes (each pass blurs it more, increasing the blur radius ).
|
// Draw the blur passes (each pass blurs it more, increasing the blur radius ).
|
||||||
|
@ -1791,6 +1842,8 @@ static inline void RB_BlurGlowTexture()
|
||||||
// After first pass put the tex coords to the viewport size.
|
// After first pass put the tex coords to the viewport size.
|
||||||
if ( iNumBlurPasses == 1 )
|
if ( iNumBlurPasses == 1 )
|
||||||
{
|
{
|
||||||
|
// OK, very weird, but dependent on which texture rectangle extension we're using, the
|
||||||
|
// texture either needs to be always texure correct or view correct...
|
||||||
if ( !g_bTextureRectangleHack )
|
if ( !g_bTextureRectangleHack )
|
||||||
{
|
{
|
||||||
iTexWidth = backEnd.viewParms.viewportWidth;
|
iTexWidth = backEnd.viewParms.viewportWidth;
|
||||||
|
@ -1800,43 +1853,43 @@ static inline void RB_BlurGlowTexture()
|
||||||
uiTex = tr.blurImage;
|
uiTex = tr.blurImage;
|
||||||
qglActiveTextureARB( GL_TEXTURE3_ARB );
|
qglActiveTextureARB( GL_TEXTURE3_ARB );
|
||||||
qglDisable( GL_TEXTURE_2D );
|
qglDisable( GL_TEXTURE_2D );
|
||||||
qglEnable( GL_TEXTURE_RECTANGLE_ARB );
|
qglEnable( GL_TEXTURE_RECTANGLE_EXT );
|
||||||
qglBindTexture( GL_TEXTURE_RECTANGLE_ARB, uiTex );
|
qglBindTexture( GL_TEXTURE_RECTANGLE_EXT, uiTex );
|
||||||
qglActiveTextureARB( GL_TEXTURE2_ARB );
|
qglActiveTextureARB( GL_TEXTURE2_ARB );
|
||||||
qglDisable( GL_TEXTURE_2D );
|
qglDisable( GL_TEXTURE_2D );
|
||||||
qglEnable( GL_TEXTURE_RECTANGLE_ARB );
|
qglEnable( GL_TEXTURE_RECTANGLE_EXT );
|
||||||
qglBindTexture( GL_TEXTURE_RECTANGLE_ARB, uiTex );
|
qglBindTexture( GL_TEXTURE_RECTANGLE_EXT, uiTex );
|
||||||
qglActiveTextureARB( GL_TEXTURE1_ARB );
|
qglActiveTextureARB( GL_TEXTURE1_ARB );
|
||||||
qglDisable( GL_TEXTURE_2D );
|
qglDisable( GL_TEXTURE_2D );
|
||||||
qglEnable( GL_TEXTURE_RECTANGLE_ARB );
|
qglEnable( GL_TEXTURE_RECTANGLE_EXT );
|
||||||
qglBindTexture( GL_TEXTURE_RECTANGLE_ARB, uiTex );
|
qglBindTexture( GL_TEXTURE_RECTANGLE_EXT, uiTex );
|
||||||
qglActiveTextureARB(GL_TEXTURE0_ARB );
|
qglActiveTextureARB(GL_TEXTURE0_ARB );
|
||||||
qglDisable( GL_TEXTURE_2D );
|
qglDisable( GL_TEXTURE_2D );
|
||||||
qglEnable( GL_TEXTURE_RECTANGLE_ARB );
|
qglEnable( GL_TEXTURE_RECTANGLE_EXT );
|
||||||
qglBindTexture( GL_TEXTURE_RECTANGLE_ARB, uiTex );
|
qglBindTexture( GL_TEXTURE_RECTANGLE_EXT, uiTex );
|
||||||
|
|
||||||
// Copy the current image over.
|
// Copy the current image over.
|
||||||
qglBindTexture( GL_TEXTURE_RECTANGLE_ARB, uiTex );
|
qglBindTexture( GL_TEXTURE_RECTANGLE_EXT, uiTex );
|
||||||
qglCopyTexSubImage2D( GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, 0, 0, backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight );
|
qglCopyTexSubImage2D( GL_TEXTURE_RECTANGLE_EXT, 0, 0, 0, 0, 0, backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight );
|
||||||
}
|
}
|
||||||
|
|
||||||
// Draw the fullscreen quad.
|
// Draw the fullscreen quad.
|
||||||
qglBegin( GL_QUADS );
|
qglBegin( GL_QUADS );
|
||||||
qglMultiTexCoord2fARB( GL_TEXTURE0_ARB, 0, iTexHeight );
|
qglMultiTexCoord2fARB( GL_TEXTURE0_ARB, 0, iTexHeight );
|
||||||
qglVertex2f( 0, 0 );
|
qglVertex2f( 0, 0 );
|
||||||
|
|
||||||
qglMultiTexCoord2fARB( GL_TEXTURE0_ARB, 0, 0 );
|
qglMultiTexCoord2fARB( GL_TEXTURE0_ARB, 0, 0 );
|
||||||
qglVertex2f( 0, backEnd.viewParms.viewportHeight );
|
qglVertex2f( 0, backEnd.viewParms.viewportHeight );
|
||||||
|
|
||||||
qglMultiTexCoord2fARB( GL_TEXTURE0_ARB, iTexWidth, 0 );
|
qglMultiTexCoord2fARB( GL_TEXTURE0_ARB, iTexWidth, 0 );
|
||||||
qglVertex2f( backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight );
|
qglVertex2f( backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight );
|
||||||
|
|
||||||
qglMultiTexCoord2fARB( GL_TEXTURE0_ARB, iTexWidth, iTexHeight );
|
qglMultiTexCoord2fARB( GL_TEXTURE0_ARB, iTexWidth, iTexHeight );
|
||||||
qglVertex2f( backEnd.viewParms.viewportWidth, 0 );
|
qglVertex2f( backEnd.viewParms.viewportWidth, 0 );
|
||||||
qglEnd();
|
qglEnd();
|
||||||
|
|
||||||
qglBindTexture( GL_TEXTURE_RECTANGLE_ARB, tr.blurImage );
|
qglBindTexture( GL_TEXTURE_RECTANGLE_EXT, tr.blurImage );
|
||||||
qglCopyTexSubImage2D( GL_TEXTURE_RECTANGLE_ARB, 0, 0, 0, 0, 0, backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight );
|
qglCopyTexSubImage2D( GL_TEXTURE_RECTANGLE_EXT, 0, 0, 0, 0, 0, backEnd.viewParms.viewportWidth, backEnd.viewParms.viewportHeight );
|
||||||
|
|
||||||
// Increase the texel offsets.
|
// Increase the texel offsets.
|
||||||
// NOTE: This is possibly the most important input to the effect. Even by using an exponential function I've been able to
|
// NOTE: This is possibly the most important input to the effect. Even by using an exponential function I've been able to
|
||||||
|
@ -1849,16 +1902,16 @@ static inline void RB_BlurGlowTexture()
|
||||||
|
|
||||||
// Disable multi-texturing.
|
// Disable multi-texturing.
|
||||||
qglActiveTextureARB( GL_TEXTURE3_ARB );
|
qglActiveTextureARB( GL_TEXTURE3_ARB );
|
||||||
qglDisable( GL_TEXTURE_RECTANGLE_ARB );
|
qglDisable( GL_TEXTURE_RECTANGLE_EXT );
|
||||||
|
|
||||||
qglActiveTextureARB( GL_TEXTURE2_ARB );
|
qglActiveTextureARB( GL_TEXTURE2_ARB );
|
||||||
qglDisable( GL_TEXTURE_RECTANGLE_ARB );
|
qglDisable( GL_TEXTURE_RECTANGLE_EXT );
|
||||||
|
|
||||||
qglActiveTextureARB( GL_TEXTURE1_ARB );
|
qglActiveTextureARB( GL_TEXTURE1_ARB );
|
||||||
qglDisable( GL_TEXTURE_RECTANGLE_ARB );
|
qglDisable( GL_TEXTURE_RECTANGLE_EXT );
|
||||||
|
|
||||||
qglActiveTextureARB(GL_TEXTURE0_ARB );
|
qglActiveTextureARB(GL_TEXTURE0_ARB );
|
||||||
qglDisable( GL_TEXTURE_RECTANGLE_ARB );
|
qglDisable( GL_TEXTURE_RECTANGLE_EXT );
|
||||||
qglEnable( GL_TEXTURE_2D );
|
qglEnable( GL_TEXTURE_2D );
|
||||||
|
|
||||||
qglDisable( GL_VERTEX_PROGRAM_ARB );
|
qglDisable( GL_VERTEX_PROGRAM_ARB );
|
||||||
|
@ -1870,6 +1923,8 @@ static inline void RB_BlurGlowTexture()
|
||||||
qglPopMatrix();
|
qglPopMatrix();
|
||||||
|
|
||||||
qglDisable( GL_BLEND );
|
qglDisable( GL_BLEND );
|
||||||
|
qglEnable( GL_DEPTH_TEST );
|
||||||
|
|
||||||
glState.currenttmu = 0; //this matches the last one we activated
|
glState.currenttmu = 0; //this matches the last one we activated
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1878,6 +1933,7 @@ static inline void RB_DrawGlowOverlay()
|
||||||
{
|
{
|
||||||
qglDisable (GL_CLIP_PLANE0);
|
qglDisable (GL_CLIP_PLANE0);
|
||||||
GL_Cull( CT_TWO_SIDED );
|
GL_Cull( CT_TWO_SIDED );
|
||||||
|
qglDisable( GL_DEPTH_TEST );
|
||||||
|
|
||||||
// Go into orthographic 2d mode.
|
// Go into orthographic 2d mode.
|
||||||
qglMatrixMode(GL_PROJECTION);
|
qglMatrixMode(GL_PROJECTION);
|
||||||
|
@ -1888,29 +1944,29 @@ static inline void RB_DrawGlowOverlay()
|
||||||
qglPushMatrix();
|
qglPushMatrix();
|
||||||
qglLoadIdentity();
|
qglLoadIdentity();
|
||||||
|
|
||||||
GL_State(GLS_DEPTHTEST_DISABLE);
|
GL_State(0);
|
||||||
|
|
||||||
qglDisable( GL_TEXTURE_2D );
|
qglDisable( GL_TEXTURE_2D );
|
||||||
qglEnable( GL_TEXTURE_RECTANGLE_ARB );
|
qglEnable( GL_TEXTURE_RECTANGLE_EXT );
|
||||||
|
|
||||||
// For debug purposes.
|
// For debug purposes.
|
||||||
if ( r_DynamicGlow->integer != 2 )
|
if ( r_DynamicGlow->integer != 2 )
|
||||||
{
|
{
|
||||||
// Render the normal scene texture.
|
// Render the normal scene texture.
|
||||||
qglBindTexture( GL_TEXTURE_RECTANGLE_ARB, tr.sceneImage );
|
qglBindTexture( GL_TEXTURE_RECTANGLE_EXT, tr.sceneImage );
|
||||||
qglBegin(GL_QUADS);
|
qglBegin(GL_QUADS);
|
||||||
qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
|
qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
|
||||||
qglTexCoord2f( 0, glConfig.vidHeight );
|
qglTexCoord2f( 0, glConfig.vidHeight );
|
||||||
qglVertex2f( 0, 0 );
|
qglVertex2f( 0, 0 );
|
||||||
|
|
||||||
qglTexCoord2f( 0, 0 );
|
qglTexCoord2f( 0, 0 );
|
||||||
qglVertex2f( 0, glConfig.vidHeight );
|
qglVertex2f( 0, glConfig.vidHeight );
|
||||||
|
|
||||||
qglTexCoord2f( glConfig.vidWidth, 0 );
|
qglTexCoord2f( glConfig.vidWidth, 0 );
|
||||||
qglVertex2f( glConfig.vidWidth, glConfig.vidHeight );
|
qglVertex2f( glConfig.vidWidth, glConfig.vidHeight );
|
||||||
|
|
||||||
qglTexCoord2f( glConfig.vidWidth, glConfig.vidHeight );
|
qglTexCoord2f( glConfig.vidWidth, glConfig.vidHeight );
|
||||||
qglVertex2f( glConfig.vidWidth, 0 );
|
qglVertex2f( glConfig.vidWidth, 0 );
|
||||||
qglEnd();
|
qglEnd();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1927,29 +1983,84 @@ static inline void RB_DrawGlowOverlay()
|
||||||
qglEnable( GL_BLEND );
|
qglEnable( GL_BLEND );
|
||||||
|
|
||||||
// Now additively render the glow texture.
|
// Now additively render the glow texture.
|
||||||
qglBindTexture( GL_TEXTURE_RECTANGLE_ARB, tr.blurImage );
|
qglBindTexture( GL_TEXTURE_RECTANGLE_EXT, tr.blurImage );
|
||||||
qglBegin(GL_QUADS);
|
qglBegin(GL_QUADS);
|
||||||
qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
|
qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
|
||||||
qglTexCoord2f( 0, r_DynamicGlowHeight->integer );
|
qglTexCoord2f( 0, r_DynamicGlowHeight->integer );
|
||||||
qglVertex2f( 0, 0 );
|
qglVertex2f( 0, 0 );
|
||||||
|
|
||||||
qglTexCoord2f( 0, 0 );
|
qglTexCoord2f( 0, 0 );
|
||||||
qglVertex2f( 0, glConfig.vidHeight );
|
qglVertex2f( 0, glConfig.vidHeight );
|
||||||
|
|
||||||
qglTexCoord2f( r_DynamicGlowWidth->integer, 0 );
|
qglTexCoord2f( r_DynamicGlowWidth->integer, 0 );
|
||||||
qglVertex2f( glConfig.vidWidth, glConfig.vidHeight );
|
qglVertex2f( glConfig.vidWidth, glConfig.vidHeight );
|
||||||
|
|
||||||
qglTexCoord2f( r_DynamicGlowWidth->integer, r_DynamicGlowHeight->integer );
|
qglTexCoord2f( r_DynamicGlowWidth->integer, r_DynamicGlowHeight->integer );
|
||||||
qglVertex2f( glConfig.vidWidth, 0 );
|
qglVertex2f( glConfig.vidWidth, 0 );
|
||||||
qglEnd();
|
qglEnd();
|
||||||
|
|
||||||
qglDisable( GL_TEXTURE_RECTANGLE_ARB );
|
qglDisable( GL_TEXTURE_RECTANGLE_EXT );
|
||||||
qglEnable( GL_TEXTURE_2D );
|
qglEnable( GL_TEXTURE_2D );
|
||||||
qglBlendFunc( GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR );
|
qglBlendFunc( GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR );
|
||||||
qglDisable( GL_BLEND );
|
qglDisable( GL_BLEND );
|
||||||
|
|
||||||
|
// NOTE: Multi-texture wasn't that much faster (we're obviously not bottlenecked by transform pipeline),
|
||||||
|
// and besides, soft glow looks better anyways.
|
||||||
|
/* else
|
||||||
|
{
|
||||||
|
int iTexWidth = glConfig.vidWidth, iTexHeight = glConfig.vidHeight;
|
||||||
|
if ( GL_TEXTURE_RECTANGLE_EXT == GL_TEXTURE_RECTANGLE_NV )
|
||||||
|
{
|
||||||
|
iTexWidth = r_DynamicGlowWidth->integer;
|
||||||
|
iTexHeight = r_DynamicGlowHeight->integer;
|
||||||
|
}
|
||||||
|
|
||||||
|
qglActiveTextureARB( GL_TEXTURE1_ARB );
|
||||||
|
qglDisable( GL_TEXTURE_2D );
|
||||||
|
qglEnable( GL_TEXTURE_RECTANGLE_EXT );
|
||||||
|
qglBindTexture( GL_TEXTURE_RECTANGLE_EXT, tr.screenGlow );
|
||||||
|
qglTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_ADD );
|
||||||
|
|
||||||
|
qglActiveTextureARB(GL_TEXTURE0_ARB );
|
||||||
|
qglDisable( GL_TEXTURE_2D );
|
||||||
|
qglEnable( GL_TEXTURE_RECTANGLE_EXT );
|
||||||
|
qglBindTexture( GL_TEXTURE_RECTANGLE_EXT, tr.sceneImage );
|
||||||
|
qglTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL );
|
||||||
|
|
||||||
|
qglBegin(GL_QUADS);
|
||||||
|
qglColor4f( 1.0f, 1.0f, 1.0f, 1.0f );
|
||||||
|
qglMultiTexCoord2fARB( GL_TEXTURE1_ARB, 0, iTexHeight );
|
||||||
|
qglMultiTexCoord2fARB( GL_TEXTURE0_ARB, 0, glConfig.vidHeight );
|
||||||
|
qglVertex2f( 0, 0 );
|
||||||
|
|
||||||
|
qglMultiTexCoord2fARB( GL_TEXTURE1_ARB, 0, 0 );
|
||||||
|
qglMultiTexCoord2fARB( GL_TEXTURE0_ARB, 0, 0 );
|
||||||
|
qglVertex2f( 0, glConfig.vidHeight );
|
||||||
|
|
||||||
|
qglMultiTexCoord2fARB( GL_TEXTURE1_ARB, iTexWidth, 0 );
|
||||||
|
qglMultiTexCoord2fARB( GL_TEXTURE0_ARB, glConfig.vidWidth, 0 );
|
||||||
|
qglVertex2f( glConfig.vidWidth, glConfig.vidHeight );
|
||||||
|
|
||||||
|
qglMultiTexCoord2fARB( GL_TEXTURE1_ARB, iTexWidth, iTexHeight );
|
||||||
|
qglMultiTexCoord2fARB( GL_TEXTURE0_ARB, glConfig.vidWidth, glConfig.vidHeight );
|
||||||
|
qglVertex2f( glConfig.vidWidth, 0 );
|
||||||
|
qglEnd();
|
||||||
|
|
||||||
|
qglActiveTextureARB( GL_TEXTURE1_ARB );
|
||||||
|
qglTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
|
||||||
|
qglDisable( GL_TEXTURE_RECTANGLE_EXT );
|
||||||
|
|
||||||
|
qglActiveTextureARB(GL_TEXTURE0_ARB );
|
||||||
|
qglTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE );
|
||||||
|
qglDisable( GL_TEXTURE_RECTANGLE_EXT );
|
||||||
|
qglEnable( GL_TEXTURE_2D );
|
||||||
|
}*/
|
||||||
|
|
||||||
qglMatrixMode(GL_PROJECTION);
|
qglMatrixMode(GL_PROJECTION);
|
||||||
qglPopMatrix();
|
qglPopMatrix();
|
||||||
qglMatrixMode(GL_MODELVIEW);
|
qglMatrixMode(GL_MODELVIEW);
|
||||||
qglPopMatrix();
|
qglPopMatrix();
|
||||||
|
|
||||||
|
qglEnable( GL_DEPTH_TEST );
|
||||||
}
|
}
|
||||||
|
#endif //HAVE_GLES
|
||||||
|
|
|
@ -981,7 +981,7 @@ R_LoadFogs
|
||||||
*/
|
*/
|
||||||
static void R_LoadFogs( lump_t *l, lump_t *brushesLump, lump_t *sidesLump, world_t &worldData, int index ) {
|
static void R_LoadFogs( lump_t *l, lump_t *brushesLump, lump_t *sidesLump, world_t &worldData, int index ) {
|
||||||
int i;
|
int i;
|
||||||
fog_t *out;
|
jk_fog_t *out;
|
||||||
dfog_t *fogs;
|
dfog_t *fogs;
|
||||||
dbrush_t *brushes, *brush;
|
dbrush_t *brushes, *brush;
|
||||||
dbrushside_t *sides;
|
dbrushside_t *sides;
|
||||||
|
@ -1001,7 +1001,7 @@ static void R_LoadFogs( lump_t *l, lump_t *brushesLump, lump_t *sidesLump, world
|
||||||
|
|
||||||
// create fog strucutres for them
|
// create fog strucutres for them
|
||||||
worldData.numfogs = count + 1;
|
worldData.numfogs = count + 1;
|
||||||
worldData.fogs = (fog_t *)R_Hunk_Alloc ( (worldData.numfogs+1)*sizeof(*out), qtrue);
|
worldData.fogs = (jk_fog_t *)R_Hunk_Alloc ( (worldData.numfogs+1)*sizeof(*out), qtrue);
|
||||||
worldData.globalFog = -1;
|
worldData.globalFog = -1;
|
||||||
out = worldData.fogs + 1;
|
out = worldData.fogs + 1;
|
||||||
|
|
||||||
|
|
|
@ -312,7 +312,7 @@ void RE_LAGoggles( void )
|
||||||
tr.refdef.rdflags |= (RDF_doLAGoggles|RDF_doFullbright);
|
tr.refdef.rdflags |= (RDF_doLAGoggles|RDF_doFullbright);
|
||||||
tr.refdef.doLAGoggles = qtrue;
|
tr.refdef.doLAGoggles = qtrue;
|
||||||
|
|
||||||
fog_t *fog = &tr.world->fogs[tr.world->numfogs];
|
jk_fog_t *fog = &tr.world->fogs[tr.world->numfogs];
|
||||||
|
|
||||||
fog->parms.color[0] = 0.75f;
|
fog->parms.color[0] = 0.75f;
|
||||||
fog->parms.color[1] = 0.42f + Q_flrand(0.0f, 1.0f) * 0.025f;
|
fog->parms.color[1] = 0.42f + Q_flrand(0.0f, 1.0f) * 0.025f;
|
||||||
|
|
|
@ -443,6 +443,7 @@ static int PowerOf2(int iArg)
|
||||||
return iArg;
|
return iArg;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef HAVE_GLES
|
||||||
Dissolve_t Dissolve={0};
|
Dissolve_t Dissolve={0};
|
||||||
#define fDISSOLVE_SECONDS 0.75f
|
#define fDISSOLVE_SECONDS 0.75f
|
||||||
|
|
||||||
|
@ -1060,4 +1061,4 @@ qboolean RE_InitDissolve(qboolean bForceCircularExtroWipe)
|
||||||
|
|
||||||
return bReturn;
|
return bReturn;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -786,7 +786,7 @@ R_AComputeFogNum
|
||||||
static int R_GComputeFogNum( trRefEntity_t *ent ) {
|
static int R_GComputeFogNum( trRefEntity_t *ent ) {
|
||||||
|
|
||||||
int i;
|
int i;
|
||||||
fog_t *fog;
|
jk_fog_t *fog;
|
||||||
|
|
||||||
if ( tr.refdef.rdflags & RDF_NOWORLDMODEL ) {
|
if ( tr.refdef.rdflags & RDF_NOWORLDMODEL ) {
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -126,9 +126,9 @@ void GL_TextureMode( const char *string ) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if ( i == numTextureModes ) {
|
if ( i == numTextureModes ) {
|
||||||
ri->Printf( PRINT_ALL, "bad filter name\n" );
|
ri.Printf( PRINT_ALL, "bad filter name\n" );
|
||||||
for ( i = 0; i < numTextureModes ; i++ ) {
|
for ( i = 0; i < numTextureModes ; i++ ) {
|
||||||
ri->Printf( PRINT_ALL, "%s\n", modes[i].name );
|
ri.Printf( PRINT_ALL, "%s\n", modes[i].name );
|
||||||
}
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -138,7 +138,7 @@ void GL_TextureMode( const char *string ) {
|
||||||
|
|
||||||
// If the level they requested is less than possible, set the max possible...
|
// If the level they requested is less than possible, set the max possible...
|
||||||
if ( r_ext_texture_filter_anisotropic->value > glConfig.maxTextureFilterAnisotropy )
|
if ( r_ext_texture_filter_anisotropic->value > glConfig.maxTextureFilterAnisotropy )
|
||||||
ri->Cvar_SetValue( "r_ext_texture_filter_anisotropic", glConfig.maxTextureFilterAnisotropy );
|
ri.Cvar_SetValue( "r_ext_texture_filter_anisotropic", glConfig.maxTextureFilterAnisotropy );
|
||||||
|
|
||||||
// change all the existing mipmap texture objects
|
// change all the existing mipmap texture objects
|
||||||
R_Images_StartIteration();
|
R_Images_StartIteration();
|
||||||
|
|
|
@ -33,7 +33,7 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||||
#include "tr_WorldEffects.h"
|
#include "tr_WorldEffects.h"
|
||||||
|
|
||||||
glconfig_t glConfig;
|
glconfig_t glConfig;
|
||||||
glstate_t glState;
|
jk_glstate_t glState;
|
||||||
window_t window;
|
window_t window;
|
||||||
|
|
||||||
static void GfxInfo_f( void );
|
static void GfxInfo_f( void );
|
||||||
|
@ -185,6 +185,7 @@ cvar_t *com_buildScript;
|
||||||
cvar_t *r_environmentMapping;
|
cvar_t *r_environmentMapping;
|
||||||
cvar_t *r_screenshotJpegQuality;
|
cvar_t *r_screenshotJpegQuality;
|
||||||
|
|
||||||
|
#ifndef HAVE_GLES
|
||||||
#if !defined(__APPLE__)
|
#if !defined(__APPLE__)
|
||||||
PFNGLSTENCILOPSEPARATEPROC qglStencilOpSeparate;
|
PFNGLSTENCILOPSEPARATEPROC qglStencilOpSeparate;
|
||||||
#endif
|
#endif
|
||||||
|
@ -207,6 +208,7 @@ PFNGLGETCOMBINEROUTPUTPARAMETERFVNVPROC qglGetCombinerOutputParameterfvNV;
|
||||||
PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC qglGetCombinerOutputParameterivNV;
|
PFNGLGETCOMBINEROUTPUTPARAMETERIVNVPROC qglGetCombinerOutputParameterivNV;
|
||||||
PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC qglGetFinalCombinerInputParameterfvNV;
|
PFNGLGETFINALCOMBINERINPUTPARAMETERFVNVPROC qglGetFinalCombinerInputParameterfvNV;
|
||||||
PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC qglGetFinalCombinerInputParameterivNV;
|
PFNGLGETFINALCOMBINERINPUTPARAMETERIVNVPROC qglGetFinalCombinerInputParameterivNV;
|
||||||
|
#endif
|
||||||
|
|
||||||
PFNGLPROGRAMSTRINGARBPROC qglProgramStringARB;
|
PFNGLPROGRAMSTRINGARBPROC qglProgramStringARB;
|
||||||
PFNGLBINDPROGRAMARBPROC qglBindProgramARB;
|
PFNGLBINDPROGRAMARBPROC qglBindProgramARB;
|
||||||
|
@ -228,8 +230,10 @@ PFNGLGETPROGRAMIVARBPROC qglGetProgramivARB;
|
||||||
PFNGLGETPROGRAMSTRINGARBPROC qglGetProgramStringARB;
|
PFNGLGETPROGRAMSTRINGARBPROC qglGetProgramStringARB;
|
||||||
PFNGLISPROGRAMARBPROC qglIsProgramARB;
|
PFNGLISPROGRAMARBPROC qglIsProgramARB;
|
||||||
|
|
||||||
|
#ifndef HAVE_GLES
|
||||||
PFNGLLOCKARRAYSEXTPROC qglLockArraysEXT;
|
PFNGLLOCKARRAYSEXTPROC qglLockArraysEXT;
|
||||||
PFNGLUNLOCKARRAYSEXTPROC qglUnlockArraysEXT;
|
PFNGLUNLOCKARRAYSEXTPROC qglUnlockArraysEXT;
|
||||||
|
#endif
|
||||||
|
|
||||||
bool g_bTextureRectangleHack = false;
|
bool g_bTextureRectangleHack = false;
|
||||||
|
|
||||||
|
@ -261,7 +265,7 @@ void R_Splash()
|
||||||
const float y2 = 240 + height / 2;
|
const float y2 = 240 + height / 2;
|
||||||
|
|
||||||
#ifdef HAVE_GLES
|
#ifdef HAVE_GLES
|
||||||
GLimp_EndFrame();
|
//GLimp_EndFrame();
|
||||||
GLfloat tex[] = {
|
GLfloat tex[] = {
|
||||||
0,0 ,
|
0,0 ,
|
||||||
1,0,
|
1,0,
|
||||||
|
@ -489,6 +493,7 @@ static void GLimp_InitExtensions( void )
|
||||||
glConfig.clampToEdgeAvailable = qtrue;
|
glConfig.clampToEdgeAvailable = qtrue;
|
||||||
Com_Printf ("...using GL_EXT_texture_edge_clamp\n" );
|
Com_Printf ("...using GL_EXT_texture_edge_clamp\n" );
|
||||||
|
|
||||||
|
#ifndef HAVE_GLES
|
||||||
// GL_ARB_multitexture
|
// GL_ARB_multitexture
|
||||||
qglMultiTexCoord2fARB = NULL;
|
qglMultiTexCoord2fARB = NULL;
|
||||||
qglActiveTextureARB = NULL;
|
qglActiveTextureARB = NULL;
|
||||||
|
@ -553,6 +558,7 @@ static void GLimp_InitExtensions( void )
|
||||||
}
|
}
|
||||||
|
|
||||||
bool bNVRegisterCombiners = false;
|
bool bNVRegisterCombiners = false;
|
||||||
|
|
||||||
// Register Combiners.
|
// Register Combiners.
|
||||||
if ( ri.GL_ExtensionSupported( "GL_NV_register_combiners" ) )
|
if ( ri.GL_ExtensionSupported( "GL_NV_register_combiners" ) )
|
||||||
{
|
{
|
||||||
|
@ -600,7 +606,7 @@ static void GLimp_InitExtensions( void )
|
||||||
bNVRegisterCombiners = false;
|
bNVRegisterCombiners = false;
|
||||||
Com_Printf ("...GL_NV_register_combiners not found\n" );
|
Com_Printf ("...GL_NV_register_combiners not found\n" );
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
// NOTE: Vertex and Fragment Programs are very dependant on each other - this is actually a
|
// NOTE: Vertex and Fragment Programs are very dependant on each other - this is actually a
|
||||||
// good thing! So, just check to see which we support (one or the other) and load the shared
|
// good thing! So, just check to see which we support (one or the other) and load the shared
|
||||||
// function pointers. ARB rocks!
|
// function pointers. ARB rocks!
|
||||||
|
@ -686,6 +692,7 @@ static void GLimp_InitExtensions( void )
|
||||||
// Find out how many general combiners they have.
|
// Find out how many general combiners they have.
|
||||||
#define GL_MAX_GENERAL_COMBINERS_NV 0x854D
|
#define GL_MAX_GENERAL_COMBINERS_NV 0x854D
|
||||||
GLint iNumGeneralCombiners = 0;
|
GLint iNumGeneralCombiners = 0;
|
||||||
|
bool bNVRegisterCombiners = false;
|
||||||
if(bNVRegisterCombiners)
|
if(bNVRegisterCombiners)
|
||||||
qglGetIntegerv( GL_MAX_GENERAL_COMBINERS_NV, &iNumGeneralCombiners );
|
qglGetIntegerv( GL_MAX_GENERAL_COMBINERS_NV, &iNumGeneralCombiners );
|
||||||
|
|
||||||
|
@ -704,11 +711,13 @@ static void GLimp_InitExtensions( void )
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !defined(__APPLE__)
|
#if !defined(__APPLE__)
|
||||||
|
#ifndef HAVE_GLES
|
||||||
qglStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)ri.GL_GetProcAddress("glStencilOpSeparate");
|
qglStencilOpSeparate = (PFNGLSTENCILOPSEPARATEPROC)ri.GL_GetProcAddress("glStencilOpSeparate");
|
||||||
if (qglStencilOpSeparate)
|
if (qglStencilOpSeparate)
|
||||||
{
|
{
|
||||||
glConfig.doStencilShadowsInOneDrawcall = qtrue;
|
glConfig.doStencilShadowsInOneDrawcall = qtrue;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
#else
|
#else
|
||||||
glConfig.doStencilShadowsInOneDrawcall = qtrue;
|
glConfig.doStencilShadowsInOneDrawcall = qtrue;
|
||||||
#endif
|
#endif
|
||||||
|
@ -1824,6 +1833,7 @@ void RE_Shutdown( qboolean destroyWindow, qboolean restarting ) {
|
||||||
for ( size_t i = 0; i < numCommands; i++ )
|
for ( size_t i = 0; i < numCommands; i++ )
|
||||||
ri.Cmd_RemoveCommand( commands[i].cmd );
|
ri.Cmd_RemoveCommand( commands[i].cmd );
|
||||||
|
|
||||||
|
#ifndef HAVE_GLES
|
||||||
if ( r_DynamicGlow && r_DynamicGlow->integer )
|
if ( r_DynamicGlow && r_DynamicGlow->integer )
|
||||||
{
|
{
|
||||||
// Release the Glow Vertex Shader.
|
// Release the Glow Vertex Shader.
|
||||||
|
@ -1856,6 +1866,7 @@ void RE_Shutdown( qboolean destroyWindow, qboolean restarting ) {
|
||||||
// Release the blur texture.
|
// Release the blur texture.
|
||||||
qglDeleteTextures( 1, &tr.blurImage );
|
qglDeleteTextures( 1, &tr.blurImage );
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
R_ShutdownWorldEffects();
|
R_ShutdownWorldEffects();
|
||||||
R_ShutdownFonts();
|
R_ShutdownFonts();
|
||||||
|
|
|
@ -31,10 +31,15 @@ along with this program; if not, see <http://www.gnu.org/licenses/>.
|
||||||
#include "mdx_format.h"
|
#include "mdx_format.h"
|
||||||
#include "qgl.h"
|
#include "qgl.h"
|
||||||
|
|
||||||
|
#if defined(_XBOX) || defined(HAVE_GLES)
|
||||||
|
#define GL_INDEX_TYPE GL_UNSIGNED_SHORT
|
||||||
|
typedef unsigned short glIndex_t;
|
||||||
|
#else
|
||||||
#define GL_INDEX_TYPE GL_UNSIGNED_INT
|
#define GL_INDEX_TYPE GL_UNSIGNED_INT
|
||||||
typedef unsigned int glIndex_t;
|
typedef unsigned int glIndex_t;
|
||||||
|
#endif
|
||||||
|
|
||||||
extern refimport_t ri;
|
//extern refimport_t ri;
|
||||||
|
|
||||||
|
|
||||||
// 13 bits
|
// 13 bits
|
||||||
|
@ -529,7 +534,7 @@ typedef struct {
|
||||||
// for clipping distance in fog when outside
|
// for clipping distance in fog when outside
|
||||||
qboolean hasSurface;
|
qboolean hasSurface;
|
||||||
float surface[4];
|
float surface[4];
|
||||||
} fog_t;
|
} jk_fog_t;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
orientationr_t ori;
|
orientationr_t ori;
|
||||||
|
@ -769,7 +774,7 @@ typedef struct {
|
||||||
msurface_t **marksurfaces;
|
msurface_t **marksurfaces;
|
||||||
|
|
||||||
int numfogs;
|
int numfogs;
|
||||||
fog_t *fogs;
|
jk_fog_t *fogs;
|
||||||
int globalFog;
|
int globalFog;
|
||||||
|
|
||||||
int startLightMapIndex;
|
int startLightMapIndex;
|
||||||
|
@ -902,7 +907,7 @@ typedef struct {
|
||||||
#define FUNCTABLE_MASK (FUNCTABLE_SIZE-1)
|
#define FUNCTABLE_MASK (FUNCTABLE_SIZE-1)
|
||||||
|
|
||||||
|
|
||||||
// the renderer front end should never modify glstate_t
|
// the renderer front end should never modify jk_glstate_t
|
||||||
typedef struct {
|
typedef struct {
|
||||||
int currenttextures[2];
|
int currenttextures[2];
|
||||||
int currenttmu;
|
int currenttmu;
|
||||||
|
@ -910,7 +915,7 @@ typedef struct {
|
||||||
int texEnv[2];
|
int texEnv[2];
|
||||||
int faceCulling;
|
int faceCulling;
|
||||||
uint32_t glStateBits;
|
uint32_t glStateBits;
|
||||||
} glstate_t;
|
} jk_glstate_t;
|
||||||
|
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -1076,7 +1081,7 @@ void R_Images_DeleteImage(image_t *pImage);
|
||||||
extern backEndState_t backEnd;
|
extern backEndState_t backEnd;
|
||||||
extern trGlobals_t tr;
|
extern trGlobals_t tr;
|
||||||
extern glconfig_t glConfig; // outside of TR since it shouldn't be cleared during ref re-init
|
extern glconfig_t glConfig; // outside of TR since it shouldn't be cleared during ref re-init
|
||||||
extern glstate_t glState; // outside of TR since it shouldn't be cleared during ref re-init
|
extern jk_glstate_t glState; // outside of TR since it shouldn't be cleared during ref re-init
|
||||||
extern window_t window;
|
extern window_t window;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1049,7 +1049,7 @@ See if a sprite is inside a fog volume
|
||||||
*/
|
*/
|
||||||
int R_SpriteFogNum( trRefEntity_t *ent ) {
|
int R_SpriteFogNum( trRefEntity_t *ent ) {
|
||||||
int i;
|
int i;
|
||||||
fog_t *fog;
|
jk_fog_t *fog;
|
||||||
|
|
||||||
if ( tr.refdef.rdflags & RDF_NOWORLDMODEL ) {
|
if ( tr.refdef.rdflags & RDF_NOWORLDMODEL ) {
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1475,7 +1475,7 @@ void R_SetViewFogIndex (void)
|
||||||
{
|
{
|
||||||
if ( tr.world->numfogs > 1 )
|
if ( tr.world->numfogs > 1 )
|
||||||
{//more than just the LA goggles
|
{//more than just the LA goggles
|
||||||
fog_t *fog;
|
jk_fog_t *fog;
|
||||||
int contents = ri.SV_PointContents( tr.refdef.vieworg, 0 );
|
int contents = ri.SV_PointContents( tr.refdef.vieworg, 0 );
|
||||||
if ( (contents&CONTENTS_FOG) )
|
if ( (contents&CONTENTS_FOG) )
|
||||||
{//only take a tr.refdef.fogIndex if the tr.refdef.vieworg is actually *in* that fog brush (assumption: checks pointcontents for any CONTENTS_FOG, not that particular brush...)
|
{//only take a tr.refdef.fogIndex if the tr.refdef.vieworg is actually *in* that fog brush (assumption: checks pointcontents for any CONTENTS_FOG, not that particular brush...)
|
||||||
|
|
|
@ -242,7 +242,7 @@ R_ComputeFogNum
|
||||||
*/
|
*/
|
||||||
static int R_ComputeFogNum( md3Header_t *header, trRefEntity_t *ent ) {
|
static int R_ComputeFogNum( md3Header_t *header, trRefEntity_t *ent ) {
|
||||||
int i;
|
int i;
|
||||||
fog_t *fog;
|
jk_fog_t *fog;
|
||||||
md3Frame_t *md3Frame;
|
md3Frame_t *md3Frame;
|
||||||
vec3_t localOrigin;
|
vec3_t localOrigin;
|
||||||
|
|
||||||
|
|
|
@ -85,7 +85,7 @@ void CQuickSpriteSystem::Flush(void)
|
||||||
if (mUseFog && r_drawfog->integer == 2 &&
|
if (mUseFog && r_drawfog->integer == 2 &&
|
||||||
mFogIndex == tr.world->globalFog)
|
mFogIndex == tr.world->globalFog)
|
||||||
{ //enable hardware fog when we draw this thing if applicable -rww
|
{ //enable hardware fog when we draw this thing if applicable -rww
|
||||||
fog_t *fog = tr.world->fogs + mFogIndex;
|
jk_fog_t *fog = tr.world->fogs + mFogIndex;
|
||||||
|
|
||||||
qglFogf(GL_FOG_MODE, GL_EXP2);
|
qglFogf(GL_FOG_MODE, GL_EXP2);
|
||||||
qglFogf(GL_FOG_DENSITY, logtestExp2 / fog->parms.depthForOpaque);
|
qglFogf(GL_FOG_DENSITY, logtestExp2 / fog->parms.depthForOpaque);
|
||||||
|
@ -163,7 +163,7 @@ void CQuickSpriteSystem::Flush(void)
|
||||||
if (mUseFog && (r_drawfog->integer != 2 || mFogIndex != tr.world->globalFog))
|
if (mUseFog && (r_drawfog->integer != 2 || mFogIndex != tr.world->globalFog))
|
||||||
#endif
|
#endif
|
||||||
{
|
{
|
||||||
fog_t *fog = tr.world->fogs + mFogIndex;
|
jk_fog_t *fog = tr.world->fogs + mFogIndex;
|
||||||
|
|
||||||
//
|
//
|
||||||
// render the fog pass
|
// render the fog pass
|
||||||
|
|
|
@ -120,7 +120,7 @@ void RE_AddPolyToScene( qhandle_t hShader , int numVerts, const polyVert_t *vert
|
||||||
srfPoly_t *poly;
|
srfPoly_t *poly;
|
||||||
int i;
|
int i;
|
||||||
int fogIndex = 0;
|
int fogIndex = 0;
|
||||||
fog_t *fog;
|
jk_fog_t *fog;
|
||||||
vec3_t bounds[2];
|
vec3_t bounds[2];
|
||||||
|
|
||||||
if ( !tr.registered ) {
|
if ( !tr.registered ) {
|
||||||
|
|
|
@ -51,6 +51,8 @@ This is just for OpenGL conformance testing, it should never be the fastest
|
||||||
================
|
================
|
||||||
*/
|
*/
|
||||||
static void APIENTRY R_ArrayElementDiscrete( GLint index ) {
|
static void APIENTRY R_ArrayElementDiscrete( GLint index ) {
|
||||||
|
|
||||||
|
#ifndef HAVE_GLES
|
||||||
qglColor4ubv( tess.svars.colors[ index ] );
|
qglColor4ubv( tess.svars.colors[ index ] );
|
||||||
if ( glState.currenttmu ) {
|
if ( glState.currenttmu ) {
|
||||||
qglMultiTexCoord2fARB( 0, tess.svars.texcoords[ 0 ][ index ][0], tess.svars.texcoords[ 0 ][ index ][1] );
|
qglMultiTexCoord2fARB( 0, tess.svars.texcoords[ 0 ][ index ][0], tess.svars.texcoords[ 0 ][ index ][1] );
|
||||||
|
@ -59,6 +61,7 @@ static void APIENTRY R_ArrayElementDiscrete( GLint index ) {
|
||||||
qglTexCoord2fv( tess.svars.texcoords[ 0 ][ index ] );
|
qglTexCoord2fv( tess.svars.texcoords[ 0 ][ index ] );
|
||||||
}
|
}
|
||||||
qglVertex3fv( tess.xyz[ index ] );
|
qglVertex3fv( tess.xyz[ index ] );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -67,6 +70,7 @@ R_DrawStripElements
|
||||||
|
|
||||||
===================
|
===================
|
||||||
*/
|
*/
|
||||||
|
#ifndef HAVE_GLES
|
||||||
static int c_vertexes; // for seeing how long our average strips are
|
static int c_vertexes; // for seeing how long our average strips are
|
||||||
static int c_begins;
|
static int c_begins;
|
||||||
static void R_DrawStripElements( int numIndexes, const glIndex_t *indexes, void ( APIENTRY *element )(GLint) ) {
|
static void R_DrawStripElements( int numIndexes, const glIndex_t *indexes, void ( APIENTRY *element )(GLint) ) {
|
||||||
|
@ -74,13 +78,14 @@ static void R_DrawStripElements( int numIndexes, const glIndex_t *indexes, void
|
||||||
glIndex_t last[3];
|
glIndex_t last[3];
|
||||||
qboolean even;
|
qboolean even;
|
||||||
|
|
||||||
qglBegin( GL_TRIANGLE_STRIP );
|
|
||||||
c_begins++;
|
c_begins++;
|
||||||
|
|
||||||
if ( numIndexes <= 0 ) {
|
if ( numIndexes <= 0 ) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qglBegin( GL_TRIANGLE_STRIP );
|
||||||
|
|
||||||
// prime the strip
|
// prime the strip
|
||||||
element( indexes[0] );
|
element( indexes[0] );
|
||||||
element( indexes[1] );
|
element( indexes[1] );
|
||||||
|
@ -106,8 +111,8 @@ static void R_DrawStripElements( int numIndexes, const glIndex_t *indexes, void
|
||||||
assert( (int)indexes[i+2] < tess.numVertexes );
|
assert( (int)indexes[i+2] < tess.numVertexes );
|
||||||
even = qtrue;
|
even = qtrue;
|
||||||
}
|
}
|
||||||
// otherwise we're done with this strip so finish it and start
|
// otherwise we're done with this strip so finish it and start
|
||||||
// a new one
|
// a new one
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
qglEnd();
|
qglEnd();
|
||||||
|
@ -134,8 +139,8 @@ static void R_DrawStripElements( int numIndexes, const glIndex_t *indexes, void
|
||||||
|
|
||||||
even = qfalse;
|
even = qfalse;
|
||||||
}
|
}
|
||||||
// otherwise we're done with this strip so finish it and start
|
// otherwise we're done with this strip so finish it and start
|
||||||
// a new one
|
// a new one
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
qglEnd();
|
qglEnd();
|
||||||
|
@ -160,6 +165,8 @@ static void R_DrawStripElements( int numIndexes, const glIndex_t *indexes, void
|
||||||
|
|
||||||
qglEnd();
|
qglEnd();
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
==================
|
==================
|
||||||
|
@ -187,12 +194,36 @@ static void R_DrawElements( int numIndexes, const glIndex_t *indexes ) {
|
||||||
|
|
||||||
if ( primitives == 2 ) {
|
if ( primitives == 2 ) {
|
||||||
qglDrawElements( GL_TRIANGLES,
|
qglDrawElements( GL_TRIANGLES,
|
||||||
numIndexes,
|
numIndexes,
|
||||||
GL_INDEX_TYPE,
|
GL_INDEX_TYPE,
|
||||||
indexes );
|
indexes );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(HAVE_GLES)
|
||||||
|
if (primitives == 1 || primitives == 3)
|
||||||
|
{
|
||||||
|
// if (tess.useConstantColor)
|
||||||
|
// {
|
||||||
|
// qglDisableClientState( GL_COLOR_ARRAY );
|
||||||
|
// qglColor4ubv( tess.constantColor );
|
||||||
|
// }
|
||||||
|
/*qglDrawElements( GL_TRIANGLES,
|
||||||
|
numIndexes,
|
||||||
|
GL_INDEX_TYPE,
|
||||||
|
indexes );*/
|
||||||
|
#if 1 // VVFIXME : Temporary solution to try and increase framerate
|
||||||
|
//qglIndexedTriToStrip( numIndexes, indexes );
|
||||||
|
|
||||||
|
qglDrawElements( GL_TRIANGLES,
|
||||||
|
numIndexes,
|
||||||
|
GL_INDEX_TYPE,
|
||||||
|
indexes );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#else // HAVE_GLES
|
||||||
if ( primitives == 1 ) {
|
if ( primitives == 1 ) {
|
||||||
R_DrawStripElements( numIndexes, indexes, qglArrayElement );
|
R_DrawStripElements( numIndexes, indexes, qglArrayElement );
|
||||||
return;
|
return;
|
||||||
|
@ -202,14 +233,13 @@ static void R_DrawElements( int numIndexes, const glIndex_t *indexes ) {
|
||||||
R_DrawStripElements( numIndexes, indexes, R_ArrayElementDiscrete );
|
R_DrawStripElements( numIndexes, indexes, R_ArrayElementDiscrete );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
#endif // HAVE_GLES
|
||||||
|
|
||||||
// anything else will cause no drawing
|
// anything else will cause no drawing
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
=============================================================
|
=============================================================
|
||||||
|
|
||||||
|
@ -1331,7 +1361,7 @@ Blends a fog texture on top of everything else
|
||||||
===================
|
===================
|
||||||
*/
|
*/
|
||||||
static void RB_FogPass( void ) {
|
static void RB_FogPass( void ) {
|
||||||
fog_t *fog;
|
jk_fog_t *fog;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
qglEnableClientState( GL_COLOR_ARRAY );
|
qglEnableClientState( GL_COLOR_ARRAY );
|
||||||
|
@ -1496,7 +1526,7 @@ static void ComputeColors( shaderStage_t *pStage, alphaGen_t forceAlphaGen, colo
|
||||||
break;
|
break;
|
||||||
case CGEN_FOG:
|
case CGEN_FOG:
|
||||||
{
|
{
|
||||||
const fog_t *fog = tr.world->fogs + tess.fogNum;
|
const jk_fog_t *fog = tr.world->fogs + tess.fogNum;
|
||||||
|
|
||||||
for ( i = 0; i < tess.numVertexes; i++ ) {
|
for ( i = 0; i < tess.numVertexes; i++ ) {
|
||||||
byteAlias_t *ba = (byteAlias_t *)&tess.svars.colors[i];
|
byteAlias_t *ba = (byteAlias_t *)&tess.svars.colors[i];
|
||||||
|
@ -1804,7 +1834,7 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input )
|
||||||
#ifndef JK2_MODE
|
#ifndef JK2_MODE
|
||||||
bool UseGLFog = false;
|
bool UseGLFog = false;
|
||||||
bool FogColorChange = false;
|
bool FogColorChange = false;
|
||||||
fog_t *fog = NULL;
|
jk_fog_t *fog = NULL;
|
||||||
|
|
||||||
if (tess.fogNum && tess.shader->fogPass && (tess.fogNum == tr.world->globalFog || tess.fogNum == tr.world->numfogs)
|
if (tess.fogNum && tess.shader->fogPass && (tess.fogNum == tr.world->globalFog || tess.fogNum == tr.world->numfogs)
|
||||||
&& r_drawfog->value == 2)
|
&& r_drawfog->value == 2)
|
||||||
|
|
|
@ -821,7 +821,7 @@ void RB_CalcFogTexCoords( float *st ) {
|
||||||
float s, t;
|
float s, t;
|
||||||
float eyeT;
|
float eyeT;
|
||||||
qboolean eyeOutside;
|
qboolean eyeOutside;
|
||||||
fog_t *fog;
|
jk_fog_t *fog;
|
||||||
vec3_t localVec;
|
vec3_t localVec;
|
||||||
vec4_t fogDistanceVector, fogDepthVector;
|
vec4_t fogDistanceVector, fogDepthVector;
|
||||||
|
|
||||||
|
|
|
@ -677,7 +677,11 @@ void RB_CaptureScreenImage(void)
|
||||||
cY = 0;
|
cY = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_GLES
|
||||||
|
qglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, cX, cY, radX, radY, 0);
|
||||||
|
#else
|
||||||
qglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16, cX, cY, radX, radY, 0);
|
qglCopyTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16, cX, cY, radX, radY, 0);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -750,20 +754,49 @@ void RB_DistortionFill(void)
|
||||||
GL_State(0);
|
GL_State(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_GLES
|
||||||
|
qglColor4f(1.0f, 1.0f, 1.0f, alpha);
|
||||||
|
GLboolean text = qglIsEnabled(GL_TEXTURE_COORD_ARRAY);
|
||||||
|
GLboolean glcol = qglIsEnabled(GL_COLOR_ARRAY);
|
||||||
|
if (!text)
|
||||||
|
qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
|
||||||
|
if (glcol)
|
||||||
|
qglDisableClientState( GL_COLOR_ARRAY );
|
||||||
|
GLfloat tex[] = {
|
||||||
|
0+spost2, 1-spost,
|
||||||
|
0+spost2, 0+spost,
|
||||||
|
1-spost2, 0+spost,
|
||||||
|
1-spost2, 1-spost
|
||||||
|
};
|
||||||
|
GLfloat vtx[] = {
|
||||||
|
0, 0,
|
||||||
|
0, glConfig.vidHeight,
|
||||||
|
glConfig.vidWidth, glConfig.vidHeight,
|
||||||
|
glConfig.vidWidth, 0
|
||||||
|
};
|
||||||
|
qglTexCoordPointer( 2, GL_FLOAT, 0, tex );
|
||||||
|
qglVertexPointer ( 2, GL_FLOAT, 0, vtx );
|
||||||
|
qglDrawArrays( GL_TRIANGLE_FAN, 0, 4 );
|
||||||
|
/* if (glcol)
|
||||||
|
qglEnableClientState( GL_COLOR_ARRAY );
|
||||||
|
if (!text)
|
||||||
|
qglDisableClientState( GL_TEXTURE_COORD_ARRAY );*/
|
||||||
|
#else
|
||||||
qglBegin(GL_QUADS);
|
qglBegin(GL_QUADS);
|
||||||
qglColor4f(1.0f, 1.0f, 1.0f, alpha);
|
qglColor4f(1.0f, 1.0f, 1.0f, alpha);
|
||||||
qglTexCoord2f(0+spost2, 1-spost);
|
qglTexCoord2f(0+spost2, 1-spost);
|
||||||
qglVertex2f(0, 0);
|
qglVertex2f(0, 0);
|
||||||
|
|
||||||
qglTexCoord2f(0+spost2, 0+spost);
|
qglTexCoord2f(0+spost2, 0+spost);
|
||||||
qglVertex2f(0, glConfig.vidHeight);
|
qglVertex2f(0, glConfig.vidHeight);
|
||||||
|
|
||||||
qglTexCoord2f(1-spost2, 0+spost);
|
qglTexCoord2f(1-spost2, 0+spost);
|
||||||
qglVertex2f(glConfig.vidWidth, glConfig.vidHeight);
|
qglVertex2f(glConfig.vidWidth, glConfig.vidHeight);
|
||||||
|
|
||||||
qglTexCoord2f(1-spost2, 1-spost);
|
qglTexCoord2f(1-spost2, 1-spost);
|
||||||
qglVertex2f(glConfig.vidWidth, 0);
|
qglVertex2f(glConfig.vidWidth, 0);
|
||||||
qglEnd();
|
qglEnd();
|
||||||
|
#endif
|
||||||
|
|
||||||
if (tr_distortionAlpha == 1.0f && tr_distortionStretch == 0.0f)
|
if (tr_distortionAlpha == 1.0f && tr_distortionStretch == 0.0f)
|
||||||
{ //no overrides
|
{ //no overrides
|
||||||
|
|
|
@ -371,22 +371,62 @@ static void DrawSkySide( struct image_s *image, const int mins[2], const int max
|
||||||
int s, t;
|
int s, t;
|
||||||
|
|
||||||
GL_Bind( image );
|
GL_Bind( image );
|
||||||
|
#ifdef HAVE_GLES
|
||||||
|
GLfloat vtx[3*1024]; // arbitrary sized
|
||||||
|
GLfloat tex[2*1024];
|
||||||
|
int idx;
|
||||||
|
|
||||||
|
GLboolean text = qglIsEnabled(GL_TEXTURE_COORD_ARRAY);
|
||||||
|
GLboolean glcol = qglIsEnabled(GL_COLOR_ARRAY);
|
||||||
|
if (glcol)
|
||||||
|
qglDisableClientState(GL_COLOR_ARRAY);
|
||||||
|
if (!text)
|
||||||
|
qglEnableClientState( GL_TEXTURE_COORD_ARRAY );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
for ( t = mins[1]+HALF_SKY_SUBDIVISIONS; t < maxs[1]+HALF_SKY_SUBDIVISIONS; t++ )
|
for ( t = mins[1]+HALF_SKY_SUBDIVISIONS; t < maxs[1]+HALF_SKY_SUBDIVISIONS; t++ )
|
||||||
{
|
{
|
||||||
|
|
||||||
|
#ifdef HAVE_GLES
|
||||||
|
idx=0;
|
||||||
|
#else
|
||||||
qglBegin( GL_TRIANGLE_STRIP );
|
qglBegin( GL_TRIANGLE_STRIP );
|
||||||
|
#endif
|
||||||
|
|
||||||
for ( s = mins[0]+HALF_SKY_SUBDIVISIONS; s <= maxs[0]+HALF_SKY_SUBDIVISIONS; s++ )
|
for ( s = mins[0]+HALF_SKY_SUBDIVISIONS; s <= maxs[0]+HALF_SKY_SUBDIVISIONS; s++ )
|
||||||
{
|
{
|
||||||
|
#ifdef HAVE_GLES
|
||||||
|
memcpy(tex+idx*2, s_skyTexCoords[t][s], sizeof(GLfloat)*2);
|
||||||
|
memcpy(vtx+idx*3, s_skyPoints[t][s], sizeof(GLfloat)*3);
|
||||||
|
idx++;
|
||||||
|
memcpy(tex+idx*2, s_skyTexCoords[t+1][s], sizeof(GLfloat)*2);
|
||||||
|
memcpy(vtx+idx*3, s_skyPoints[t+1][s], sizeof(GLfloat)*3);
|
||||||
|
idx++;
|
||||||
|
#else
|
||||||
qglTexCoord2fv( s_skyTexCoords[t][s] );
|
qglTexCoord2fv( s_skyTexCoords[t][s] );
|
||||||
qglVertex3fv( s_skyPoints[t][s] );
|
qglVertex3fv( s_skyPoints[t][s] );
|
||||||
|
|
||||||
qglTexCoord2fv( s_skyTexCoords[t+1][s] );
|
qglTexCoord2fv( s_skyTexCoords[t+1][s] );
|
||||||
qglVertex3fv( s_skyPoints[t+1][s] );
|
qglVertex3fv( s_skyPoints[t+1][s] );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef HAVE_GLES
|
||||||
|
|
||||||
|
qglVertexPointer (3, GL_FLOAT, 0, vtx);
|
||||||
|
qglTexCoordPointer(2, GL_FLOAT, 0, tex);
|
||||||
|
qglDrawArrays(GL_TRIANGLE_STRIP, 0, idx);
|
||||||
|
#else
|
||||||
qglEnd();
|
qglEnd();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
#ifdef HAVE_GLES
|
||||||
|
if (glcol)
|
||||||
|
qglEnableClientState(GL_COLOR_ARRAY);
|
||||||
|
if (!text)
|
||||||
|
qglDisableClientState( GL_TEXTURE_COORD_ARRAY );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void DrawSkyBox( shader_t *shader )
|
static void DrawSkyBox( shader_t *shader )
|
||||||
|
|
Loading…
Reference in a new issue