0
0
Fork 0
mirror of https://github.com/ReactionQuake3/reaction.git synced 2025-04-14 14:11:20 +00:00
This commit is contained in:
Andrei Drexler 2011-03-16 11:38:35 +00:00
parent 2ed5d524c8
commit 6cfaa9c14a
5 changed files with 56 additions and 43 deletions

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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.

View file

@ -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);
}
}