mirror of
https://github.com/ReactionQuake3/reaction.git
synced 2025-04-14 14:11:20 +00:00
Tweaks
This commit is contained in:
parent
2ed5d524c8
commit
6cfaa9c14a
5 changed files with 56 additions and 43 deletions
reaction/code/renderer
|
@ -112,9 +112,9 @@ extern void (APIENTRY * qglGetActiveAttribARB) (GLhandleARB programObj, GLui
|
|||
GLint * size, GLenum * type, GLcharARB * name);
|
||||
extern GLint(APIENTRY * qglGetAttribLocationARB) (GLhandleARB programObj, const GLcharARB * name);
|
||||
|
||||
#define HANDLE_EXT_FUNC(t, n) extern t q##n
|
||||
#define HANDLE_EXT_FUNC(t, n) extern t q##n;
|
||||
|
||||
ADD_ALL_EXTENSION_FUNCTIONS;
|
||||
ADD_ALL_EXTENSION_FUNCTIONS
|
||||
|
||||
#undef HANDLE_EXT_FUNC
|
||||
|
||||
|
|
|
@ -1,18 +1,29 @@
|
|||
#ifndef __QGLEXTENSIONS_H__
|
||||
#define __QGLEXTENSIONS_H__
|
||||
|
||||
#define GL_EXT_framebuffer_object_functions \
|
||||
HANDLE_EXT_FUNC(PFNGLGENFRAMEBUFFERSEXTPROC, glGenFramebuffersEXT); \
|
||||
HANDLE_EXT_FUNC(PFNGLBINDFRAMEBUFFEREXTPROC, glBindFramebufferEXT); \
|
||||
HANDLE_EXT_FUNC(PFNGLFRAMEBUFFERTEXTURE2DEXTPROC, glFramebufferTexture2DEXT); \
|
||||
HANDLE_EXT_FUNC(PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC, glFramebufferRenderbufferEXT); \
|
||||
HANDLE_EXT_FUNC(PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC, glCheckFramebufferStatusEXT); \
|
||||
HANDLE_EXT_FUNC(PFNGLDELETEFRAMEBUFFERSEXTPROC, glDeleteFramebuffersEXT); \
|
||||
HANDLE_EXT_FUNC(PFNGLGENERATEMIPMAPEXTPROC, glGenerateMipmapEXT); \
|
||||
HANDLE_EXT_FUNC(PFNGLDELETERENDERBUFFERSEXTPROC, glDeleteRenderbuffersEXT); \
|
||||
HANDLE_EXT_FUNC(PFNGLGENRENDERBUFFERSEXTPROC, glGenRenderbuffersEXT); \
|
||||
HANDLE_EXT_FUNC(PFNGLRENDERBUFFERSTORAGEEXTPROC, glRenderbufferStorageEXT); \
|
||||
HANDLE_EXT_FUNC(PFNGLBINDRENDERBUFFEREXTPROC, glBindRenderbufferEXT) \
|
||||
#define GL_EXT_framebuffer_object_functions \
|
||||
HANDLE_EXT_FUNC( PFNGLGENFRAMEBUFFERSEXTPROC, glGenFramebuffersEXT) \
|
||||
HANDLE_EXT_FUNC( PFNGLBINDFRAMEBUFFEREXTPROC, glBindFramebufferEXT) \
|
||||
HANDLE_EXT_FUNC( PFNGLFRAMEBUFFERTEXTURE2DEXTPROC, glFramebufferTexture2DEXT) \
|
||||
HANDLE_EXT_FUNC( PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC, glFramebufferRenderbufferEXT) \
|
||||
HANDLE_EXT_FUNC( PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC, glCheckFramebufferStatusEXT) \
|
||||
HANDLE_EXT_FUNC( PFNGLDELETEFRAMEBUFFERSEXTPROC, glDeleteFramebuffersEXT) \
|
||||
HANDLE_EXT_FUNC( PFNGLGENERATEMIPMAPEXTPROC, glGenerateMipmapEXT) \
|
||||
HANDLE_EXT_FUNC( PFNGLDELETERENDERBUFFERSEXTPROC, glDeleteRenderbuffersEXT) \
|
||||
HANDLE_EXT_FUNC( PFNGLGENRENDERBUFFERSEXTPROC, glGenRenderbuffersEXT) \
|
||||
HANDLE_EXT_FUNC( PFNGLRENDERBUFFERSTORAGEEXTPROC, glRenderbufferStorageEXT) \
|
||||
HANDLE_EXT_FUNC( PFNGLBINDRENDERBUFFEREXTPROC, glBindRenderbufferEXT) \
|
||||
|
||||
#define GL_ARB_occlusion_query_functions \
|
||||
HANDLE_EXT_FUNC( PFNGLGENQUERIESARBPROC, glGenQueriesARB) \
|
||||
HANDLE_EXT_FUNC( PFNGLDELETEQUERIESARBPROC, glDeleteQueriesARB) \
|
||||
HANDLE_EXT_FUNC( PFNGLISQUERYARBPROC, glIsQueryARB) \
|
||||
HANDLE_EXT_FUNC( PFNGLBEGINQUERYARBPROC, glBeginQueryARB) \
|
||||
HANDLE_EXT_FUNC( PFNGLENDQUERYARBPROC, glEndQueryARB) \
|
||||
HANDLE_EXT_FUNC( PFNGLGETQUERYIVARBPROC, glGetQueryivARB) \
|
||||
HANDLE_EXT_FUNC( PFNGLGETQUERYOBJECTIVARBPROC, glGetQueryObjectivARB) \
|
||||
HANDLE_EXT_FUNC( PFNGLGETQUERYOBJECTUIVARBPROC, glGetQueryObjectuivARB) \
|
||||
|
||||
|
||||
|
||||
#ifndef GL_EXT_framebuffer_multisample
|
||||
|
@ -42,9 +53,10 @@
|
|||
|
||||
|
||||
#define ADD_ALL_EXTENSION_FUNCTIONS \
|
||||
GL_EXT_framebuffer_object_functions; \
|
||||
GL_EXT_framebuffer_multisample_functions; \
|
||||
GL_EXT_framebuffer_object_functions \
|
||||
GL_EXT_framebuffer_multisample_functions \
|
||||
GL_EXT_framebuffer_blit_functions \
|
||||
GL_ARB_occlusion_query_functions \
|
||||
|
||||
|
||||
#endif
|
||||
|
|
|
@ -1066,6 +1066,18 @@ void R_Register( void )
|
|||
ri.Cmd_AddCommand( "gfxinfo", GfxInfo_f );
|
||||
}
|
||||
|
||||
void R_InitQueries(void)
|
||||
{
|
||||
if (!glRefConfig.occlusionQuery)
|
||||
return;
|
||||
}
|
||||
|
||||
void R_ShutDownQueries(void)
|
||||
{
|
||||
if (!glRefConfig.occlusionQuery)
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
===============
|
||||
R_Init
|
||||
|
@ -1173,6 +1185,9 @@ void R_Init( void ) {
|
|||
|
||||
R_InitFreeType();
|
||||
|
||||
R_InitQueries();
|
||||
|
||||
|
||||
|
||||
err = qglGetError();
|
||||
if ( err != GL_NO_ERROR )
|
||||
|
@ -1204,6 +1219,7 @@ void RE_Shutdown( qboolean destroyWindow ) {
|
|||
if ( tr.registered ) {
|
||||
R_SyncRenderThread();
|
||||
R_ShutdownCommandBuffers();
|
||||
R_ShutDownQueries();
|
||||
R_ShutDownFBOs();
|
||||
R_DeleteTextures();
|
||||
if (glRefConfig.vertexBufferObject)
|
||||
|
|
|
@ -2165,6 +2165,8 @@ typedef struct {
|
|||
qboolean framebufferObject;
|
||||
qboolean framebufferBlit;
|
||||
qboolean framebufferMultisample;
|
||||
|
||||
qboolean occlusionQuery;
|
||||
|
||||
// These next three are all required for one chunk of code, so glsl is
|
||||
// set if they are all true.
|
||||
|
|
|
@ -170,14 +170,15 @@ static void RB_GodRays(void)
|
|||
vec3_t dir;
|
||||
float dot;
|
||||
const float cutoff = 0.25f;
|
||||
qboolean colorize = qtrue;
|
||||
|
||||
float x, y, w, h, w2, h2;
|
||||
float w, h, w2, h2;
|
||||
matrix_t mvp;
|
||||
vec4_t pos, hpos;
|
||||
|
||||
if (!backEnd.hasSunFlare)
|
||||
return;
|
||||
|
||||
|
||||
VectorSubtract(backEnd.sunFlarePos, backEnd.viewParms.or.origin, dir);
|
||||
VectorNormalize(dir);
|
||||
|
||||
|
@ -199,8 +200,6 @@ static void RB_GodRays(void)
|
|||
pos[1] = 0.5f + hpos[1] * hpos[3];
|
||||
|
||||
// viewport dimensions
|
||||
x = 0.f;
|
||||
y = 0.f;
|
||||
w = glConfig.vidWidth;
|
||||
h = glConfig.vidHeight;
|
||||
w2 = w * 0.5f;
|
||||
|
@ -217,32 +216,16 @@ static void RB_GodRays(void)
|
|||
|
||||
// first, downsample the main framebuffers
|
||||
R_FBO_Bind(tr.fbo.quarter[0]);
|
||||
R_FBO_BindColorBuffer(tr.fbo.full[0], 0);
|
||||
RB_DrawQuad(x, y, w2, h2, 0.f, 0.f, 1.f, 1.f);
|
||||
|
||||
R_FBO_Bind(tr.fbo.quarter[1]);
|
||||
R_FBO_BindColorBuffer(tr.fbo.full[1], 0);
|
||||
RB_DrawQuad(x, y, w2, h2, 0.f, 0.f, 1.f, 1.f);
|
||||
|
||||
R_FBO_Bind(tr.fbo.quarter[0]);
|
||||
R_FBO_BindColorBuffer(tr.fbo.quarter[1], 0);
|
||||
|
||||
// then blend over the flare buffer using multiply2x
|
||||
if (1)
|
||||
RB_DrawQuad(0.f, 0.f, w2, h2, 0.f, 0.f, 1.f, 1.f);
|
||||
|
||||
if (colorize)
|
||||
{
|
||||
GL_State(GLS_DEPTHTEST_DISABLE | GLS_SRCBLEND_DST_COLOR | GLS_DSTBLEND_SRC_COLOR );
|
||||
R_FBO_BindColorBuffer(tr.fbo.full[0], 0);
|
||||
mul = 1.f;
|
||||
RB_Color4f(mul, mul, mul, 1.f);
|
||||
RB_DrawQuad(x, y, w2, h2, 0.f, 0.f, 1.f, 1.f);
|
||||
}
|
||||
|
||||
// or additively
|
||||
if (0)
|
||||
{
|
||||
GL_State(GLS_DEPTHTEST_DISABLE | GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE );
|
||||
mul = 0.25f;
|
||||
RB_Color4f(mul, mul, mul, 1.f);
|
||||
RB_DrawQuad(x, y, w2, h2, 0.f, 0.f, 1.f, 1.f);
|
||||
RB_DrawQuad(0.f, 0.f, w2, h2, 0.f, 0.f, 1.f, 1.f);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -255,7 +238,7 @@ static void RB_GodRays(void)
|
|||
{
|
||||
R_FBO_Bind(tr.fbo.quarter[(~i) & 1]);
|
||||
R_FBO_BindColorBuffer(tr.fbo.quarter[i&1], 0);
|
||||
RB_RadialBlur(5, stretch, x, y, w2, h2, pos[0], pos[1], 1.f);
|
||||
RB_RadialBlur(5, stretch, 0.f, 0.f, w2, h2, pos[0], pos[1], 1.125f);
|
||||
stretch += stretch_add;
|
||||
}
|
||||
}
|
||||
|
@ -267,7 +250,7 @@ static void RB_GodRays(void)
|
|||
GL_State(GLS_DEPTHTEST_DISABLE | GLS_SRCBLEND_ONE | GLS_DSTBLEND_ONE );
|
||||
|
||||
RB_Color4f(1.f, 1.f, 1.f, 1.f);
|
||||
RB_DrawQuad(x, y, w, h, 0.f, 0.f, 1.f, 1.f);
|
||||
RB_DrawQuad(0.f, 0.f, w, h, 0.f, 0.f, 1.f, 1.f);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue