Now rendering!

2D stuff doesn't draw, and 3D is all wonky, but this is progress!
This commit is contained in:
Simon 2022-03-26 23:31:03 +00:00
parent d6ade0215f
commit 170f32709b
14 changed files with 99 additions and 209 deletions

View file

@ -197,12 +197,10 @@ void main()
gl_Position = u_ProjectionMatrix * (u_ViewMatrices[gl_ViewID_OVR] * (u_ModelMatrix * vec4(position, 1.0))); gl_Position = u_ProjectionMatrix * (u_ViewMatrices[gl_ViewID_OVR] * (u_ModelMatrix * vec4(position, 1.0)));
#if defined(USE_MODELMATRIX)
position = (u_ModelMatrix * vec4(position, 1.0)).xyz; position = (u_ModelMatrix * vec4(position, 1.0)).xyz;
normal = (u_ModelMatrix * vec4(normal, 0.0)).xyz; normal = (u_ModelMatrix * vec4(normal, 0.0)).xyz;
#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT) #if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
tangent = (u_ModelMatrix * vec4(tangent, 0.0)).xyz; tangent = (u_ModelMatrix * vec4(tangent, 0.0)).xyz;
#endif
#endif #endif
#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT) #if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
@ -213,9 +211,7 @@ void main()
vec3 L = u_LightOrigin.xyz - (position * u_LightOrigin.w); vec3 L = u_LightOrigin.xyz - (position * u_LightOrigin.w);
#elif defined(USE_LIGHT) && !defined(USE_FAST_LIGHT) #elif defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
vec3 L = attr_LightDirection; vec3 L = attr_LightDirection;
#if defined(USE_MODELMATRIX)
L = (u_ModelMatrix * vec4(L, 0.0)).xyz; L = (u_ModelMatrix * vec4(L, 0.0)).xyz;
#endif
#endif #endif
#if defined(USE_LIGHTMAP) #if defined(USE_LIGHTMAP)

View file

@ -270,29 +270,11 @@ void GL_State( unsigned long stateBits )
void GL_SetProjectionMatrix(mat4_t matrix) void GL_SetProjectionMatrix(mat4_t matrix)
{ {
Mat4Copy(matrix, glState.projection); Mat4Copy(matrix, glState.projection);
Mat4Multiply(glState.projection, glState.modelview, glState.modelviewProjection);
} }
void GL_SetModelviewMatrix(mat4_t matrix)
void GL_SetModelviewMatrix(mat4_t matrix, qboolean applyStereoView)
{ {
/*
if (applyStereoView)
{
if (tr.refdef.stereoFrame == STEREO_LEFT) {
Mat4Multiply(tr.vrParms.viewL, matrix, glState.modelview);
} else if (tr.refdef.stereoFrame == STEREO_RIGHT) {
Mat4Multiply(tr.vrParms.viewR, matrix, glState.modelview);
} else {
Mat4Copy(matrix, glState.modelview); Mat4Copy(matrix, glState.modelview);
}
} else
*/
{
Mat4Copy(matrix, glState.modelview);
}
Mat4Multiply(glState.projection, glState.modelview, glState.modelviewProjection);
} }
@ -427,7 +409,7 @@ void RB_BeginDrawingView (void) {
plane2[2] = DotProduct (backEnd.viewParms.or.axis[2], plane); plane2[2] = DotProduct (backEnd.viewParms.or.axis[2], plane);
plane2[3] = DotProduct (plane, backEnd.viewParms.or.origin) - plane[3]; plane2[3] = DotProduct (plane, backEnd.viewParms.or.origin) - plane[3];
#endif #endif
GL_SetModelviewMatrix( s_flipMatrix, qtrue ); GL_SetModelviewMatrix( s_flipMatrix );
} }
} }
@ -546,7 +528,7 @@ void RB_RenderDrawSurfList( drawSurf_t *drawSurfs, int numDrawSurfs ) {
R_TransformDlights( backEnd.refdef.num_dlights, backEnd.refdef.dlights, &backEnd.or ); R_TransformDlights( backEnd.refdef.num_dlights, backEnd.refdef.dlights, &backEnd.or );
} }
GL_SetModelviewMatrix( backEnd.or.eyeViewMatrix[2], qtrue ); GL_SetModelviewMatrix( backEnd.or.eyeViewMatrix[2] );
// //
// change depthrange. Also change projection matrix so first person weapon does not look like coming // change depthrange. Also change projection matrix so first person weapon does not look like coming
@ -618,7 +600,7 @@ void RB_RenderDrawSurfList( drawSurf_t *drawSurfs, int numDrawSurfs ) {
// go back to the world modelview matrix // go back to the world modelview matrix
GL_SetModelviewMatrix( backEnd.viewParms.world.eyeViewMatrix[2], qtrue ); GL_SetModelviewMatrix( backEnd.viewParms.world.eyeViewMatrix[2] );
#ifdef __ANDROID__ #ifdef __ANDROID__
glDepthRangef(0, 1); glDepthRangef(0, 1);
@ -670,7 +652,7 @@ void RB_SetGL2D (void) {
Mat4Ortho(0, width, height, 0, 0, 1, matrix); Mat4Ortho(0, width, height, 0, 0, 1, matrix);
GL_SetProjectionMatrix(matrix); GL_SetProjectionMatrix(matrix);
Mat4Identity(matrix); Mat4Identity(matrix);
GL_SetModelviewMatrix(matrix, false); GL_SetModelviewMatrix(matrix);
GL_State( GLS_DEPTHTEST_DISABLE | GL_State( GLS_DEPTHTEST_DISABLE |
GLS_SRCBLEND_SRC_ALPHA | GLS_SRCBLEND_SRC_ALPHA |
@ -754,7 +736,8 @@ void RE_StretchRaw (int x, int y, int w, int h, int cols, int rows, const byte *
GLSL_BindProgram(&tr.textureColorShader); GLSL_BindProgram(&tr.textureColorShader);
//GLSL_SetUniformMat4(&tr.textureColorShader, UNIFORM_MODELVIEWPROJECTIONMATRIX, glState.modelviewProjection); //GLSL_SetUniformMat4(&tr.textureColorShader, UNIFORM_MODELVIEWPROJECTIONMATRIX, glState.modelviewProjection);
GLSL_SetUniformMat4(&tr.textureColorShader, UNIFORM_MODELMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(&tr.textureColorShader, UNIFORM_MODELMATRIX, glState.modelview);
GLSL_BindBuffers(&tr.textureColorShader);
GLSL_SetUniformVec4(&tr.textureColorShader, UNIFORM_COLOR, colorWhite); GLSL_SetUniformVec4(&tr.textureColorShader, UNIFORM_COLOR, colorWhite);
RB_InstantQuad2(quadVerts, texCoords); RB_InstantQuad2(quadVerts, texCoords);

View file

@ -410,130 +410,22 @@ void RE_BeginFrame( stereoFrame_t stereoFrame ) {
ri.Error(ERR_FATAL, "RE_BeginFrame() - glGetError() failed (0x%x)!", err); ri.Error(ERR_FATAL, "RE_BeginFrame() - glGetError() failed (0x%x)!", err);
} }
if (glConfig.stereoEnabled) { {
if (tr.renderFbo && tr.vrParms.renderBufferOriginal == 0) { if (tr.renderFbo && tr.vrParms.renderBufferOriginal == 0) {
tr.vrParms.renderBufferOriginal = tr.renderFbo->frameBuffer; tr.vrParms.renderBufferOriginal = tr.renderFbo->frameBuffer;
} }
/* if ( stereoFrame == STEREO_LEFT ) { {
if (tr.vrParms.valid == qtrue) { if (tr.vrParms.valid == qtrue) {
if (tr.renderFbo) { if (tr.renderFbo) {
switchEyeCommand_t* sec; switchEyeCommand_t* sec;
if (!(sec = R_GetCommandBuffer(sizeof(*sec)))) if (!(sec = R_GetCommandBuffer(sizeof(*sec))))
return; return;
sec->commandId = RC_SWITCH_EYE; sec->commandId = RC_SWITCH_EYE;
sec->eye = tr.vrParms.renderBufferL; sec->eye = tr.vrParms.renderBuffer;
sec->stereoFrame = stereoFrame; sec->stereoFrame = stereoFrame;
} }
} }
} else if ( stereoFrame == STEREO_RIGHT ) {
if (tr.vrParms.valid == qtrue) {
if (tr.renderFbo) {
switchEyeCommand_t* sec;
if (!(sec = R_GetCommandBuffer(sizeof(*sec))))
return;
sec->commandId = RC_SWITCH_EYE;
sec->eye = tr.vrParms.renderBufferR;
sec->stereoFrame = stereoFrame;
}
}
} else {
ri.Error( ERR_FATAL, "RE_BeginFrame: Stereo is enabled, but stereoFrame was %i", stereoFrame );
}
*/
}
else
{
if(r_anaglyphMode->integer)
{
if(r_anaglyphMode->modified)
{
// clear both, front and backbuffer.
qglColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
backEnd.colorMask[0] = GL_FALSE;
backEnd.colorMask[1] = GL_FALSE;
backEnd.colorMask[2] = GL_FALSE;
backEnd.colorMask[3] = GL_FALSE;
if (glRefConfig.framebufferObject)
{
// clear all framebuffers
if (tr.msaaResolveFbo)
{
FBO_Bind(tr.msaaResolveFbo);
qglClear(GL_COLOR_BUFFER_BIT);
}
if (tr.renderFbo)
{
FBO_Bind(tr.renderFbo);
qglClear(GL_COLOR_BUFFER_BIT);
}
FBO_Bind(NULL);
}
qglDrawBuffer(GL_FRONT);
qglClear(GL_COLOR_BUFFER_BIT);
qglDrawBuffer(GL_BACK);
qglClear(GL_COLOR_BUFFER_BIT);
r_anaglyphMode->modified = qfalse;
}
if(stereoFrame == STEREO_LEFT)
{
if( !(cmd = R_GetCommandBuffer(sizeof(*cmd))) )
return;
if( !(colcmd = R_GetCommandBuffer(sizeof(*colcmd))) )
return;
}
else if(stereoFrame == STEREO_RIGHT)
{
clearDepthCommand_t *cldcmd;
if( !(cldcmd = R_GetCommandBuffer(sizeof(*cldcmd))) )
return;
cldcmd->commandId = RC_CLEARDEPTH;
if( !(colcmd = R_GetCommandBuffer(sizeof(*colcmd))) )
return;
}
else
ri.Error( ERR_FATAL, "RE_BeginFrame: Stereo is enabled, but stereoFrame was %i", stereoFrame );
R_SetColorMode(colcmd->rgba, stereoFrame, r_anaglyphMode->integer);
colcmd->commandId = RC_COLORMASK;
}
else
{
if(stereoFrame != STEREO_CENTER)
ri.Error( ERR_FATAL, "RE_BeginFrame: Stereo is disabled, but stereoFrame was %i", stereoFrame );
if( !(cmd = R_GetCommandBuffer(sizeof(*cmd))) )
return;
}
if(cmd)
{
cmd->commandId = RC_DRAW_BUFFER;
if(r_anaglyphMode->modified)
{
qglColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE);
backEnd.colorMask[0] = 0;
backEnd.colorMask[1] = 0;
backEnd.colorMask[2] = 0;
backEnd.colorMask[3] = 0;
r_anaglyphMode->modified = qfalse;
}
if (!Q_stricmp(r_drawBuffer->string, "GL_FRONT"))
cmd->buffer = (int)GL_FRONT;
else
cmd->buffer = (int)GL_BACK;
} }
} }

View file

@ -577,8 +577,8 @@ void FBO_BlitFromTexture(struct image_s *src, vec4_t inSrcTexCorners, vec2_t inS
GLSL_BindProgram(shaderProgram); GLSL_BindProgram(shaderProgram);
GLSL_SetUniformMat4(shaderProgram, UNIFORM_MODELMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(shaderProgram, UNIFORM_MODELMATRIX, glState.modelview);
// GLSL_SetUniformMat4(shaderProgram, UNIFORM_MODELVIEWPROJECTIONMATRIX, projection); GLSL_BindBuffers(shaderProgram);
GLSL_SetUniformVec4(shaderProgram, UNIFORM_COLOR, color); GLSL_SetUniformVec4(shaderProgram, UNIFORM_COLOR, color);
GLSL_SetUniformVec2(shaderProgram, UNIFORM_INVTEXRES, invTexRes); GLSL_SetUniformVec2(shaderProgram, UNIFORM_INVTEXRES, invTexRes);
GLSL_SetUniformVec2(shaderProgram, UNIFORM_AUTOEXPOSUREMINMAX, tr.refdef.autoExposureMinMax); GLSL_SetUniformVec2(shaderProgram, UNIFORM_AUTOEXPOSUREMINMAX, tr.refdef.autoExposureMinMax);

View file

@ -529,7 +529,7 @@ void RB_RenderFlares (void) {
Mat4Copy(glState.projection, oldprojection); Mat4Copy(glState.projection, oldprojection);
Mat4Copy(glState.modelview, oldmodelview); Mat4Copy(glState.modelview, oldmodelview);
Mat4Identity(matrix); Mat4Identity(matrix);
GL_SetModelviewMatrix(matrix, qtrue); GL_SetModelviewMatrix(matrix);
Mat4Ortho( backEnd.viewParms.viewportX, backEnd.viewParms.viewportX + backEnd.viewParms.viewportWidth, Mat4Ortho( backEnd.viewParms.viewportX, backEnd.viewParms.viewportX + backEnd.viewParms.viewportWidth,
backEnd.viewParms.viewportY, backEnd.viewParms.viewportY + backEnd.viewParms.viewportHeight, backEnd.viewParms.viewportY, backEnd.viewParms.viewportY + backEnd.viewParms.viewportHeight,
-99999, 99999, matrix ); -99999, 99999, matrix );
@ -544,7 +544,7 @@ void RB_RenderFlares (void) {
} }
GL_SetProjectionMatrix(oldprojection); GL_SetProjectionMatrix(oldprojection);
GL_SetModelviewMatrix(oldmodelview, qtrue); GL_SetModelviewMatrix(oldmodelview);
} }

View file

@ -312,6 +312,7 @@ static void GLSL_GetShaderHeader( GLenum shaderType, const GLchar *extra, char *
Q_strcat(dest, size, "#define NUM_VIEWS 2\n"); Q_strcat(dest, size, "#define NUM_VIEWS 2\n");
Q_strcat(dest, size, "#extension GL_OVR_multiview2 : enable\n"); Q_strcat(dest, size, "#extension GL_OVR_multiview2 : enable\n");
Q_strcat(dest, size, "layout(num_views=NUM_VIEWS) in;\n"); Q_strcat(dest, size, "layout(num_views=NUM_VIEWS) in;\n");
}
// HACK: use in main menu medium float precision (to prevent issue with missing models textures) // HACK: use in main menu medium float precision (to prevent issue with missing models textures)
if (Cvar_Get("r_uiFullScreen", "1", 0)->integer) if (Cvar_Get("r_uiFullScreen", "1", 0)->integer)
@ -319,17 +320,13 @@ static void GLSL_GetShaderHeader( GLenum shaderType, const GLchar *extra, char *
else else
Q_strcat(dest, size, "precision highp float;\n"); Q_strcat(dest, size, "precision highp float;\n");
if(shaderType == GL_VERTEX_SHADER)
{
Q_strcat(dest, size, "#define attribute in\n"); Q_strcat(dest, size, "#define attribute in\n");
Q_strcat(dest, size, "#define varying out\n"); Q_strcat(dest, size, "#define varying out\n");
} }
else else
{ {
// HACK: use in main menu medium float precision (to prevent issue with missing models textures)
if (Cvar_Get("r_uiFullScreen", "1", 0)->integer)
Q_strcat(dest, size, "precision mediump float;\n");
else
Q_strcat(dest, size, "precision highp float;\n");
Q_strcat(dest, size, "#define varying in\n"); Q_strcat(dest, size, "#define varying in\n");
Q_strcat(dest, size, "out vec4 out_Color;\n"); Q_strcat(dest, size, "out vec4 out_Color;\n");
@ -1316,7 +1313,7 @@ void GLSL_InitGPUShaders(void)
if (i & LIGHTDEF_ENTITY_VERTEX_ANIMATION) if (i & LIGHTDEF_ENTITY_VERTEX_ANIMATION)
{ {
Q_strcat(extradefines, 1024, "#define USE_VERTEX_ANIMATION\n#define USE_MODELMATRIX\n"); Q_strcat(extradefines, 1024, "#define USE_VERTEX_ANIMATION\n");
attribs |= ATTR_POSITION2 | ATTR_NORMAL2; attribs |= ATTR_POSITION2 | ATTR_NORMAL2;
if (r_normalMapping->integer) if (r_normalMapping->integer)
@ -1326,7 +1323,6 @@ void GLSL_InitGPUShaders(void)
} }
else if (i & LIGHTDEF_ENTITY_BONE_ANIMATION) else if (i & LIGHTDEF_ENTITY_BONE_ANIMATION)
{ {
Q_strcat(extradefines, 1024, "#define USE_MODELMATRIX\n");
Q_strcat(extradefines, 1024, va("#define USE_BONE_ANIMATION\n#define MAX_GLSL_BONES %d\n", glRefConfig.glslMaxAnimatedBones)); Q_strcat(extradefines, 1024, va("#define USE_BONE_ANIMATION\n#define MAX_GLSL_BONES %d\n", glRefConfig.glslMaxAnimatedBones));
attribs |= ATTR_BONE_INDEXES | ATTR_BONE_WEIGHTS; attribs |= ATTR_BONE_INDEXES | ATTR_BONE_WEIGHTS;
} }
@ -1680,7 +1676,7 @@ void GLSL_BindProgram(shaderProgram_t * program)
GLuint programObject = program ? program->program : 0; GLuint programObject = program ? program->program : 0;
char *name = program ? program->name : "NULL"; char *name = program ? program->name : "NULL";
if(r_logFile->integer) if (r_logFile->integer)
{ {
// don't just call LogComment, or we will get a call to va() every frame! // don't just call LogComment, or we will get a call to va() every frame!
GLimp_LogComment(va("--- GLSL_BindProgram( %s ) ---\n", name)); GLimp_LogComment(va("--- GLSL_BindProgram( %s ) ---\n", name));
@ -1689,7 +1685,33 @@ void GLSL_BindProgram(shaderProgram_t * program)
if (GL_UseProgram(programObject)) if (GL_UseProgram(programObject))
backEnd.pc.c_glslShaderBinds++; backEnd.pc.c_glslShaderBinds++;
}
static GLuint GLSL_CalculateProjection() {
GLuint result = NORMAL_PROJECTION;
mat4_t matrix;
Mat4Ortho(0, glConfig.vidWidth, glConfig.vidHeight, 0, 0, 1, matrix);
if (
//Is this set up as an orthographic projection?
glState.projection[0] == matrix[0] &&
glState.projection[5] == matrix[5] &&
glState.projection[10] == matrix[10] &&
glState.projection[12] == matrix[12]&&
glState.projection[13] == matrix[13] &&
glState.projection[14] == matrix[14] &&
glState.projection[15] == matrix[15])
{
result = ORTHO_PROJECTION;
}
return result;
}
void GLSL_BindBuffers( shaderProgram_t * program )
{
qglBindBufferBase( qglBindBufferBase(
GL_UNIFORM_BUFFER, GL_UNIFORM_BUFFER,
program->viewMatricesBinding, program->viewMatricesBinding,
@ -1698,7 +1720,7 @@ void GLSL_BindProgram(shaderProgram_t * program)
qglBindBufferBase( qglBindBufferBase(
GL_UNIFORM_BUFFER, GL_UNIFORM_BUFFER,
program->projectionMatrixBinding, program->projectionMatrixBinding,
projectionMatricesBuffer[backEnd.projection2D ? ORTHO_PROJECTION : NORMAL_PROJECTION]); projectionMatricesBuffer[GLSL_CalculateProjection()]);
} }

View file

@ -1390,9 +1390,9 @@ typedef struct {
uint32_t vertexAttribsEnabled; // global if no VAOs, tess only otherwise uint32_t vertexAttribsEnabled; // global if no VAOs, tess only otherwise
FBO_t *currentFBO; FBO_t *currentFBO;
vao_t *currentVao; vao_t *currentVao;
mat4_t modelview; mat4_t modelview;
mat4_t projection; mat4_t projection;
mat4_t modelviewProjection;
} glstate_t; } glstate_t;
typedef enum { typedef enum {
@ -1923,7 +1923,7 @@ void GL_CheckErrs( char *file, int line );
#define GL_CheckErrors(...) GL_CheckErrs(__FILE__, __LINE__) #define GL_CheckErrors(...) GL_CheckErrs(__FILE__, __LINE__)
void GL_State( unsigned long stateVector ); void GL_State( unsigned long stateVector );
void GL_SetProjectionMatrix(mat4_t matrix); void GL_SetProjectionMatrix(mat4_t matrix);
void GL_SetModelviewMatrix(mat4_t matrix, qboolean applyStereoView); void GL_SetModelviewMatrix(mat4_t matrix);
void GL_Cull( int cullType ); void GL_Cull( int cullType );
#define GLS_SRCBLEND_ZERO 0x00000001 #define GLS_SRCBLEND_ZERO 0x00000001
@ -2244,6 +2244,7 @@ void GLSL_PrepareShaders(void);
void GLSL_ShutdownGPUShaders(void); void GLSL_ShutdownGPUShaders(void);
void GLSL_VertexAttribPointers(uint32_t attribBits); void GLSL_VertexAttribPointers(uint32_t attribBits);
void GLSL_BindProgram(shaderProgram_t * program); void GLSL_BindProgram(shaderProgram_t * program);
void GLSL_BindBuffers( shaderProgram_t * program );
void GLSL_SetUniformInt(shaderProgram_t *program, int uniformNum, GLint value); void GLSL_SetUniformInt(shaderProgram_t *program, int uniformNum, GLint value);
void GLSL_SetUniformFloat(shaderProgram_t *program, int uniformNum, GLfloat value); void GLSL_SetUniformFloat(shaderProgram_t *program, int uniformNum, GLfloat value);

View file

@ -582,7 +582,7 @@ void R_RotateForViewer (void)
if (eye < 2) if (eye < 2)
{ {
float scale = ((r_stereoSeparation->value / 1000.0f) / 2.0f) * (32.0f); float scale = ((r_stereoSeparation->value / 1000.0f) / 2.0f) * (32.0f);
VectorMA(origin, (eye == 0 ? 1.0f : -1.0f) * 100.0f, tr.viewParms.or.axis[1], origin); // VectorMA(origin, (eye == 0 ? 1.0f : -1.0f) * 100.0f, tr.viewParms.or.axis[1], origin);
} }
viewerMatrix[0] = tr.viewParms.or.axis[0][0]; viewerMatrix[0] = tr.viewParms.or.axis[0][0];

View file

@ -114,8 +114,8 @@ static void DrawTris (shaderCommands_t *input) {
GLSL_BindProgram(sp); GLSL_BindProgram(sp);
GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview);
//GLSL_SetUniformMat4(sp, UNIFORM_MODELVIEWPROJECTIONMATRIX, glState.modelviewProjection); GLSL_BindBuffers(sp);
VectorSet4(color, 1, 1, 1, 1); VectorSet4(color, 1, 1, 1, 1);
GLSL_SetUniformVec4(sp, UNIFORM_COLOR, color); GLSL_SetUniformVec4(sp, UNIFORM_COLOR, color);
GLSL_SetUniformInt(sp, UNIFORM_ALPHATEST, 0); GLSL_SetUniformInt(sp, UNIFORM_ALPHATEST, 0);
@ -353,8 +353,8 @@ static void ProjectDlightTexture( void ) {
GLSL_BindProgram(sp); GLSL_BindProgram(sp);
GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview);
//GLSL_SetUniformMat4(sp, UNIFORM_MODELVIEWPROJECTIONMATRIX, glState.modelviewProjection); GLSL_BindBuffers(sp);
GLSL_SetUniformFloat(sp, UNIFORM_VERTEXLERP, glState.vertexAttribsInterpolation); GLSL_SetUniformFloat(sp, UNIFORM_VERTEXLERP, glState.vertexAttribsInterpolation);
@ -693,8 +693,8 @@ static void ForwardDlight( void ) {
GLSL_BindProgram(sp); GLSL_BindProgram(sp);
GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview);
//GLSL_SetUniformMat4(sp, UNIFORM_MODELVIEWPROJECTIONMATRIX, glState.modelviewProjection); GLSL_BindBuffers(sp);
GLSL_SetUniformVec3(sp, UNIFORM_VIEWORIGIN, backEnd.viewParms.or.origin); GLSL_SetUniformVec3(sp, UNIFORM_VIEWORIGIN, backEnd.viewParms.or.origin);
GLSL_SetUniformVec3(sp, UNIFORM_LOCALVIEWORIGIN, backEnd.or.viewOrigin); GLSL_SetUniformVec3(sp, UNIFORM_LOCALVIEWORIGIN, backEnd.or.viewOrigin);
@ -756,7 +756,8 @@ static void ForwardDlight( void ) {
GL_State( GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE | GLS_DEPTHFUNC_EQUAL ); GL_State( GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE | GLS_DEPTHFUNC_EQUAL );
GLSL_SetUniformInt(sp, UNIFORM_ALPHATEST, 0); GLSL_SetUniformInt(sp, UNIFORM_ALPHATEST, 0);
GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview);
GLSL_BindBuffers(sp);
if (pStage->bundle[TB_DIFFUSEMAP].image[0]) if (pStage->bundle[TB_DIFFUSEMAP].image[0])
R_BindAnimatedImageToTMU( &pStage->bundle[TB_DIFFUSEMAP], TB_DIFFUSEMAP); R_BindAnimatedImageToTMU( &pStage->bundle[TB_DIFFUSEMAP], TB_DIFFUSEMAP);
@ -847,8 +848,8 @@ static void ProjectPshadowVBOGLSL( void ) {
GLSL_BindProgram(sp); GLSL_BindProgram(sp);
GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview);
//GLSL_SetUniformMat4(sp, UNIFORM_MODELVIEWPROJECTIONMATRIX, glState.modelviewProjection); GLSL_BindBuffers(sp);
VectorCopy(origin, vector); VectorCopy(origin, vector);
vector[3] = 1.0f; vector[3] = 1.0f;
@ -924,8 +925,8 @@ static void RB_FogPass( void ) {
fog = tr.world->fogs + tess.fogNum; fog = tr.world->fogs + tess.fogNum;
GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview);
//GLSL_SetUniformMat4(sp, UNIFORM_MODELVIEWPROJECTIONMATRIX, glState.modelviewProjection); GLSL_BindBuffers(sp);
GLSL_SetUniformFloat(sp, UNIFORM_VERTEXLERP, glState.vertexAttribsInterpolation); GLSL_SetUniformFloat(sp, UNIFORM_VERTEXLERP, glState.vertexAttribsInterpolation);
@ -1099,8 +1100,8 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input )
GLSL_BindProgram(sp); GLSL_BindProgram(sp);
GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview);
//GLSL_SetUniformMat4(sp, UNIFORM_MODELVIEWPROJECTIONMATRIX, glState.modelviewProjection); GLSL_BindBuffers(sp);
GLSL_SetUniformVec3(sp, UNIFORM_VIEWORIGIN, backEnd.viewParms.or.origin); GLSL_SetUniformVec3(sp, UNIFORM_VIEWORIGIN, backEnd.viewParms.or.origin);
GLSL_SetUniformVec3(sp, UNIFORM_LOCALVIEWORIGIN, backEnd.or.viewOrigin); GLSL_SetUniformVec3(sp, UNIFORM_LOCALVIEWORIGIN, backEnd.or.viewOrigin);
@ -1216,7 +1217,8 @@ static void RB_IterateStagesGeneric( shaderCommands_t *input )
} }
} }
GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview);
GLSL_BindBuffers(sp);
GLSL_SetUniformVec4(sp, UNIFORM_NORMALSCALE, pStage->normalScale); GLSL_SetUniformVec4(sp, UNIFORM_NORMALSCALE, pStage->normalScale);
@ -1421,7 +1423,8 @@ static void RB_RenderShadowmap( shaderCommands_t *input )
// GLSL_SetUniformMat4(sp, UNIFORM_MODELVIEWPROJECTIONMATRIX, glState.modelviewProjection); // GLSL_SetUniformMat4(sp, UNIFORM_MODELVIEWPROJECTIONMATRIX, glState.modelviewProjection);
GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview);
GLSL_BindBuffers(sp);
GLSL_SetUniformFloat(sp, UNIFORM_VERTEXLERP, glState.vertexAttribsInterpolation); GLSL_SetUniformFloat(sp, UNIFORM_VERTEXLERP, glState.vertexAttribsInterpolation);

View file

@ -439,8 +439,8 @@ static void DrawSkySide( struct image_s *image, const int mins[2], const int max
GLSL_BindProgram(sp); GLSL_BindProgram(sp);
GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview);
//GLSL_SetUniformMat4(sp, UNIFORM_MODELVIEWPROJECTIONMATRIX, glState.modelviewProjection); GLSL_BindBuffers(sp);
color[0] = color[0] =
color[1] = color[1] =
@ -805,7 +805,7 @@ void RB_DrawSun( float scale, shader_t *shader ) {
Mat4Translation( backEnd.viewParms.or.origin, translation ); Mat4Translation( backEnd.viewParms.or.origin, translation );
Mat4Multiply( backEnd.viewParms.world.eyeViewMatrix[2], translation, modelview ); Mat4Multiply( backEnd.viewParms.world.eyeViewMatrix[2], translation, modelview );
GL_SetModelviewMatrix( modelview, qtrue ); GL_SetModelviewMatrix( modelview );
} }
dist = backEnd.viewParms.zFar / 1.75; // div sqrt(3) dist = backEnd.viewParms.zFar / 1.75; // div sqrt(3)
@ -885,13 +885,13 @@ void RB_StageIteratorSky( void ) {
Mat4Copy( glState.modelview, oldmodelview ); Mat4Copy( glState.modelview, oldmodelview );
Mat4Translation( backEnd.viewParms.or.origin, trans ); Mat4Translation( backEnd.viewParms.or.origin, trans );
Mat4Multiply( glState.modelview, trans, product ); Mat4Multiply( glState.modelview, trans, product );
GL_SetModelviewMatrix( product, qtrue ); GL_SetModelviewMatrix( product );
} }
DrawSkyBox( tess.shader ); DrawSkyBox( tess.shader );
GL_SetModelviewMatrix( oldmodelview, qtrue ); GL_SetModelviewMatrix( oldmodelview );
} }
// generate the vertexes for all the clouds, which will be drawn // generate the vertexes for all the clouds, which will be drawn

View file

@ -227,8 +227,8 @@ void RB_InstantQuad(vec4_t quadVerts[4])
GLSL_BindProgram(&tr.textureColorShader); GLSL_BindProgram(&tr.textureColorShader);
GLSL_SetUniformMat4(&tr.textureColorShader, UNIFORM_MODELMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(&tr.textureColorShader, UNIFORM_MODELMATRIX, glState.modelview);
//GLSL_SetUniformMat4(&tr.textureColorShader, UNIFORM_MODELVIEWPROJECTIONMATRIX, glState.modelviewProjection); GLSL_BindBuffers(&tr.textureColorShader);
GLSL_SetUniformVec4(&tr.textureColorShader, UNIFORM_COLOR, colorWhite); GLSL_SetUniformVec4(&tr.textureColorShader, UNIFORM_COLOR, colorWhite);
RB_InstantQuad2(quadVerts, texCoords); RB_InstantQuad2(quadVerts, texCoords);
@ -540,8 +540,8 @@ static void RB_SurfaceBeam( void )
GLSL_BindProgram(sp); GLSL_BindProgram(sp);
GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, backEnd.or.transformMatrix); GLSL_SetUniformMat4(sp, UNIFORM_MODELMATRIX, glState.modelview);
// GLSL_SetUniformMat4(sp, UNIFORM_MODELVIEWPROJECTIONMATRIX, glState.modelviewProjection); GLSL_BindBuffers(sp);
GLSL_SetUniformVec4(sp, UNIFORM_COLOR, colorRed); GLSL_SetUniformVec4(sp, UNIFORM_COLOR, colorRed);

View file

@ -339,10 +339,8 @@ void VR_DrawFrame( engine_t* engine ) {
Com_Frame(); Com_Frame();
for (int eye = 0; eye < VRAPI_FRAME_LAYER_EYE_MAX; ++eye) {
engine->framebuffers.swapchainIndex = (engine->framebuffers.swapchainIndex + 1) % engine->framebuffers.swapchainIndex = (engine->framebuffers.swapchainIndex + 1) %
engine->framebuffers.swapchainLength; engine->framebuffers.swapchainLength;
}
// Hand over the eye images to the time warp. // Hand over the eye images to the time warp.
vrapi_SubmitFrame2(engine->ovr, &frameDesc); vrapi_SubmitFrame2(engine->ovr, &frameDesc);
@ -363,6 +361,7 @@ void VR_DrawFrame( engine_t* engine ) {
layer.Textures[eye].SwapChainIndex = engine->framebuffers.swapchainIndex; layer.Textures[eye].SwapChainIndex = engine->framebuffers.swapchainIndex;
layer.Textures[eye].TexCoordsFromTanAngles = ovrMatrix4f_TanAngleMatrixFromProjection(&defaultProjection); layer.Textures[eye].TexCoordsFromTanAngles = ovrMatrix4f_TanAngleMatrixFromProjection(&defaultProjection);
} }
layer.Header.Flags |= VRAPI_FRAME_LAYER_FLAG_CHROMATIC_ABERRATION_CORRECTION;
VR_ClearFrameBuffer(engine->framebuffers.framebuffers[engine->framebuffers.swapchainIndex], eyeW, eyeH); VR_ClearFrameBuffer(engine->framebuffers.framebuffers[engine->framebuffers.swapchainIndex], eyeW, eyeH);
@ -371,10 +370,8 @@ void VR_DrawFrame( engine_t* engine ) {
Com_Frame(); Com_Frame();
for (int eye = 0; eye < VRAPI_FRAME_LAYER_EYE_MAX; ++eye) {
engine->framebuffers.swapchainIndex = (engine->framebuffers.swapchainIndex + 1) % engine->framebuffers.swapchainIndex = (engine->framebuffers.swapchainIndex + 1) %
engine->framebuffers.swapchainLength; engine->framebuffers.swapchainLength;
}
const ovrLayerHeader2* layers[] = { const ovrLayerHeader2* layers[] = {
&layer.Header &layer.Header

View file

@ -67,7 +67,7 @@ int main(int argc, char* argv[]) {
engine_t* engine = NULL; engine_t* engine = NULL;
engine = VR_Init(java); engine = VR_Init(java);
sleep(30); //sleep(30);
//First set up resolution cached values //First set up resolution cached values
int width, height; int width, height;

View file

@ -197,12 +197,10 @@ void main()
gl_Position = u_ProjectionMatrix * (u_ViewMatrices[gl_ViewID_OVR] * (u_ModelMatrix * vec4(position, 1.0))); gl_Position = u_ProjectionMatrix * (u_ViewMatrices[gl_ViewID_OVR] * (u_ModelMatrix * vec4(position, 1.0)));
#if defined(USE_MODELMATRIX)
position = (u_ModelMatrix * vec4(position, 1.0)).xyz; position = (u_ModelMatrix * vec4(position, 1.0)).xyz;
normal = (u_ModelMatrix * vec4(normal, 0.0)).xyz; normal = (u_ModelMatrix * vec4(normal, 0.0)).xyz;
#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT) #if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
tangent = (u_ModelMatrix * vec4(tangent, 0.0)).xyz; tangent = (u_ModelMatrix * vec4(tangent, 0.0)).xyz;
#endif
#endif #endif
#if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT) #if defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
@ -213,9 +211,7 @@ void main()
vec3 L = u_LightOrigin.xyz - (position * u_LightOrigin.w); vec3 L = u_LightOrigin.xyz - (position * u_LightOrigin.w);
#elif defined(USE_LIGHT) && !defined(USE_FAST_LIGHT) #elif defined(USE_LIGHT) && !defined(USE_FAST_LIGHT)
vec3 L = attr_LightDirection; vec3 L = attr_LightDirection;
#if defined(USE_MODELMATRIX)
L = (u_ModelMatrix * vec4(L, 0.0)).xyz; L = (u_ModelMatrix * vec4(L, 0.0)).xyz;
#endif
#endif #endif
#if defined(USE_LIGHTMAP) #if defined(USE_LIGHTMAP)