本文整理汇总了C++中qglDrawBuffer函数的典型用法代码示例。如果您正苦于以下问题:C++ qglDrawBuffer函数的具体用法?C++ qglDrawBuffer怎么用?C++ qglDrawBuffer使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了qglDrawBuffer函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: GLimp_BeginFrame
/*
** GLimp_BeginFrame
*/
void GLimp_BeginFrame( float camera_separation )
{
if ( gl_bitdepth->modified )
{
if ( gl_bitdepth->value != 0 && !glw_state.allowdisplaydepthchange )
{
ri.Cvar_SetValue( "gl_bitdepth", 0 );
ri.Con_Printf( PRINT_ALL, "gl_bitdepth requires Win95 OSR2.x or WinNT 4.x\n" );
}
gl_bitdepth->modified = false;
}
if ( camera_separation < 0 && gl_state.stereo_enabled )
{
qglDrawBuffer( GL_BACK_LEFT );
}
else if ( camera_separation > 0 && gl_state.stereo_enabled )
{
qglDrawBuffer( GL_BACK_RIGHT );
}
else
{
qglDrawBuffer( GL_BACK );
}
}
开发者ID:AJenbo,项目名称:Quake-2,代码行数:28,代码来源:glw_imp.c
示例2: GLimp_BeginFrame
/*
** GLimp_BeginFrame
*/
void GLimp_BeginFrame( void )
{
if( r_colorbits->modified )
{
if( r_colorbits->integer != 0 && !glw_state.allowdisplaydepthchange )
{
Cvar_SetValue( "r_colorbits", 0 );
Com_Printf( "r_colorbits requires Win95 OSR2.x or WinNT 4.x\n" );
}
r_colorbits->modified = qfalse;
}
if( glState.cameraSeparation < 0 && glState.stereoEnabled )
{
qglDrawBuffer( GL_BACK_LEFT );
}
else if( glState.cameraSeparation > 0 && glState.stereoEnabled )
{
qglDrawBuffer( GL_BACK_RIGHT );
}
else
{
qglDrawBuffer( GL_BACK );
}
}
开发者ID:Racenet,项目名称:racesow,代码行数:28,代码来源:win_glw.c
示例3: GetWindowRect
void CCamWnd::BenchMark()
{
PAINTSTRUCT ps;
CRect rct;
GetWindowRect(rct);
long lStyle = ::GetWindowLong(GetSafeHwnd(), GWL_STYLE);
::SetWindowLong(GetSafeHwnd(), GWL_STYLE, QE3_CHILDSTYLE);
CWnd* pParent = GetParent();
SetParent(g_pParentWnd);
MoveWindow(CRect(30, 30, 400, 400), TRUE);
BeginPaint(&ps);
if (!qwglMakeCurrent(ps.hdc, g_qeglobals.d_hglrcBase))
Error ("wglMakeCurrent failed in Benchmark");
qglDrawBuffer (GL_FRONT);
double dStart = Sys_DoubleTime ();
for (int i=0 ; i < 100 ; i++)
{
m_Camera.angles[YAW] = i*4;
Cam_Draw();
}
qwglSwapBuffers(ps.hdc);
qglDrawBuffer (GL_BACK);
double dEnd = Sys_DoubleTime ();
EndPaint(&ps);
Sys_Printf ("%5.2f seconds\n", dEnd - dStart);
::SetWindowLong(GetSafeHwnd(), GWL_STYLE, lStyle);
SetParent(pParent);
MoveWindow(rct, TRUE);
}
开发者ID:AHPlankton,项目名称:Quake-III-Arena,代码行数:31,代码来源:CamWnd.cpp
示例4: GL_SetDefaultState
/*
** GL_SetDefaultState
*/
void GL_SetDefaultState( void )
{
qglClearDepth( 1.0f );
qglCullFace(GL_FRONT);
qglColor4f (1,1,1,1);
// initialize downstream texture unit if we're running
// in a multitexture environment
if ( qglActiveTextureARB ) {
GL_SelectTexture( 1 );
GL_TextureMode( r_textureMode->string );
GL_TexEnv( GL_MODULATE );
qglDisable( GL_TEXTURE_2D );
GL_SelectTexture( 0 );
}
qglEnable(GL_TEXTURE_2D);
GL_TextureMode( r_textureMode->string );
GL_TexEnv( GL_MODULATE );
qglShadeModel( GL_SMOOTH );
qglDepthFunc( GL_LEQUAL );
// the vertex array is always enabled, but the color and texture
// arrays are enabled and disabled around the compiled vertex array call
qglEnableClientState (GL_VERTEX_ARRAY);
//
// make sure our GL state vector is set correctly
//
glState.glStateBits = GLS_DEPTHTEST_DISABLE | GLS_DEPTHMASK_TRUE;
qglPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
qglDepthMask( GL_TRUE );
qglDisable( GL_DEPTH_TEST );
qglEnable( GL_SCISSOR_TEST );
qglDisable( GL_CULL_FACE );
qglDisable( GL_BLEND );
qglColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );
qglClearColor( 0.0f, 0.0f, 0.0f, 1.0f );
qglClearDepth( 1.0 );
qglDrawBuffer( GL_FRONT );
#ifdef IOS
qglClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT );
#else
qglClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_ACCUM_BUFFER_BIT|GL_STENCIL_BUFFER_BIT );
#endif
qglDrawBuffer( GL_BACK );
#ifdef IOS
qglClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_STENCIL_BUFFER_BIT );
#else
qglClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_ACCUM_BUFFER_BIT|GL_STENCIL_BUFFER_BIT );
#endif
}
开发者ID:kboxsoft,项目名称:ioq3-ios,代码行数:61,代码来源:tr_init.c
示例5: GL_SetDefaultState
/*
** GL_SetDefaultState
*/
void GL_SetDefaultState( void )
{
qglClearDepth( 1.0f );
qglCullFace(GL_FRONT);
qglColor4f (1,1,1,1);
// initialize downstream texture unit if we're running
// in a multitexture environment
if ( qglActiveTextureARB ) {
GL_SelectTexture( 1 );
GL_TextureMode( r_textureMode->string );
GL_TexEnv( GL_MODULATE );
qglDisable( GL_TEXTURE_2D );
GL_SelectTexture( 0 );
}
qglEnable(GL_TEXTURE_2D);
GL_TextureMode( r_textureMode->string );
GL_TexEnv( GL_MODULATE );
//qglShadeModel( GL_SMOOTH );
qglDepthFunc( GL_LEQUAL );
//
// make sure our GL state vector is set correctly
//
glState.glStateBits = GLS_DEPTHTEST_DISABLE | GLS_DEPTHMASK_TRUE;
glState.vertexAttribsState = 0;
glState.vertexAttribPointersSet = 0;
glState.currentProgram = 0;
qglUseProgramObjectARB(0);
qglBindBufferARB(GL_ARRAY_BUFFER_ARB, 0);
qglBindBufferARB(GL_ELEMENT_ARRAY_BUFFER_ARB, 0);
glState.currentVBO = NULL;
glState.currentIBO = NULL;
qglPolygonMode (GL_FRONT_AND_BACK, GL_FILL);
qglDepthMask( GL_TRUE );
qglDisable( GL_DEPTH_TEST );
qglEnable( GL_SCISSOR_TEST );
qglDisable( GL_CULL_FACE );
qglDisable( GL_BLEND );
qglColorMask( GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE );
qglClearColor( 0.0f, 0.0f, 0.0f, 1.0f );
qglClearDepth( 1.0 );
qglDrawBuffer( GL_FRONT );
qglClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_ACCUM_BUFFER_BIT|GL_STENCIL_BUFFER_BIT );
qglDrawBuffer( GL_BACK );
qglClear( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT|GL_ACCUM_BUFFER_BIT|GL_STENCIL_BUFFER_BIT );
}
开发者ID:lrq3000,项目名称:openarena_engine,代码行数:60,代码来源:tr_init.c
示例6: GLimp_BeginFrame
/*
** GLimp_BeginFrame
*/
void GLimp_BeginFrame( float camera_separation )
{
if (gl_state.stereo_enabled && camera_separation < 0)
qglDrawBuffer( GL_BACK_LEFT );
else if (gl_state.stereo_enabled && camera_separation > 0)
qglDrawBuffer( GL_BACK_RIGHT );
else
qglDrawBuffer( GL_BACK );
}
开发者ID:q3aql,项目名称:quake2,代码行数:12,代码来源:glw_imp.c
示例7: GLimp_BeginFrame
/*
** GLimp_BeginFrame
*/
void GLimp_BeginFrame( void )
{
if( glState.cameraSeparation < 0 && glState.stereoEnabled )
{
qglDrawBuffer( GL_BACK_LEFT );
}
else if( glState.cameraSeparation > 0 && glState.stereoEnabled )
{
qglDrawBuffer( GL_BACK_RIGHT );
}
else
{
qglDrawBuffer( GL_BACK );
}
}
开发者ID:hettoo,项目名称:racesow,代码行数:18,代码来源:win_glw.c
示例8: RB_SetBuffer
/*
=============
RB_SetBuffer
=============
*/
static void RB_SetBuffer( const void *data ) {
const setBufferCommand_t *cmd;
// see which draw buffer we want to render the frame to
cmd = (const setBufferCommand_t *)data;
backEnd.frameCount = cmd->frameCount;
qglDrawBuffer( cmd->buffer );
// clear screen for debugging
// automatically enable this with several other debug tools
// that might leave unrendered portions of the screen
if ( r_clear.GetFloat() || idStr::Length( r_clear.GetString() ) != 1 || r_lockSurfaces.GetBool() || r_singleArea.GetBool() || r_showOverDraw.GetBool() ) {
float c[3];
if ( sscanf( r_clear.GetString(), "%f %f %f", &c[0], &c[1], &c[2] ) == 3 ) {
qglClearColor( c[0], c[1], c[2], 1 );
} else if ( r_clear.GetInteger() == 2 ) {
qglClearColor( 0.0f, 0.0f, 0.0f, 1.0f );
} else if ( r_showOverDraw.GetBool() ) {
qglClearColor( 1.0f, 1.0f, 1.0f, 1.0f );
} else {
qglClearColor( 0.4f, 0.0f, 0.25f, 1.0f );
}
qglClear( GL_COLOR_BUFFER_BIT );
}
}
开发者ID:albertz,项目名称:iodoom3,代码行数:34,代码来源:tr_backend.cpp
示例9: GLRB_SetDrawBuffer
void GLRB_SetDrawBuffer( int buffer )
{
switch (buffer)
{
case DRAW_BUFFER_BACK:
qglDrawBuffer( GL_BACK );
break;
case DRAW_BUFFER_FRONT:
qglDrawBuffer( GL_FRONT );
break;
case DRAW_BUFFER_BACK_LEFT:
qglDrawBuffer( GL_BACK_LEFT );
break;
case DRAW_BUFFER_BACK_RIGHT:
qglDrawBuffer( GL_BACK_RIGHT );
break;
}
}
开发者ID:Avatarchik,项目名称:Quake-III-Arena-D3D11,代码行数:18,代码来源:gl_driver.c
示例10: RB_DrawBuffer
/*
=============
RB_DrawBuffer
=============
*/
static void RB_DrawBuffer( const void *data ) {
const drawBufferCommand_t *cmd;
cmd = (const drawBufferCommand_t *)data;
qglDrawBuffer( cmd->buffer );
R_FrameBuffer_StartFrame();
// clear screen for debugging
if ( r_clear->integer ) {
qglClearColor( 1, 0, 0.5, 1 );
qglClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
}
}
开发者ID:entdark,项目名称:q3mme,代码行数:21,代码来源:tr_backend.c
示例11: qglDrawBuffer
/*
=============
RB_DrawBuffer
=============
*/
const void *RB_DrawBuffer( const void *data ) {
const drawBufferCommand_t *cmd;
cmd = (const drawBufferCommand_t *)data;
qglDrawBuffer( cmd->buffer );
// clear screen for debugging
if ( r_clear->integer ) {
qglClearColor( 1, 0, 0.5, 1 );
qglClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
}
return (const void *)(cmd + 1);
}
开发者ID:asvo,项目名称:quake3.gpl.old,代码行数:21,代码来源:tr_backend.c
示例12: RFB_AttachTextureToObject
/*
* RFB_AttachTextureToObject
*/
void RFB_AttachTextureToObject( int object, image_t *texture )
{
r_fbo_t *fbo;
int attachment;
assert( object > 0 && object <= r_num_framebuffer_objects );
if( object <= 0 || object > r_num_framebuffer_objects ) {
return;
}
assert( texture != NULL );
if( !texture ) {
return;
}
fbo = r_framebuffer_objects + object - 1;
qglBindFramebufferEXT( GL_FRAMEBUFFER_EXT, fbo->objectID );
if( texture->flags & IT_DEPTH ) {
attachment = GL_DEPTH_ATTACHMENT_EXT;
fbo->depthTexture = texture;
} else {
attachment = GL_COLOR_ATTACHMENT0_EXT;
fbo->colorTexture = texture;
#ifndef GL_ES_VERSION_2_0
qglDrawBuffer( GL_COLOR_ATTACHMENT0_EXT );
qglReadBuffer( GL_COLOR_ATTACHMENT0_EXT );
#endif
}
texture->fbo = object;
// attach texture
qglFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, attachment, GL_TEXTURE_2D, texture->texnum, 0 );
if( ( texture->flags & ( IT_DEPTH|IT_STENCIL ) ) == ( IT_DEPTH|IT_STENCIL ) ) {
qglFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_TEXTURE_2D, texture->texnum, 0 );
}
qglBindFramebufferEXT( GL_FRAMEBUFFER_EXT, r_bound_framebuffer_objectID ? r_bound_framebuffer_object->objectID : 0 );
}
开发者ID:Clever-Boy,项目名称:qfusion,代码行数:42,代码来源:r_framebuffer.c
示例13: qglDrawBuffer
/*
=============
RB_DrawBuffer
=============
*/
const void *RB_DrawBuffer( const void *data ) {
const drawBufferCommand_t *cmd;
cmd = (const drawBufferCommand_t *)data;
qglDrawBuffer( cmd->buffer );
// clear screen for debugging
if (tr.world && tr.world->globalFog != -1)
{
unsigned i = tr.world->fogs[tr.world->globalFog].colorInt;
qglClearColor( ( (byte *)&i )[0] / 255.0, ( (byte *)&i )[1] / 255.0, ( (byte *)&i )[2] / 255.0, 1.0 );
qglClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
}
else if ( r_clear->integer ) {
qglClearColor( 1, 0, 0.5, 1 );
qglClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
}
return (const void *)(cmd + 1);
}
开发者ID:Boothand,项目名称:jk2mp,代码行数:28,代码来源:tr_backend.cpp
示例14: RB_EndSurface
/*
=============
RB_DrawBuffer
=============
*/
const void *RB_DrawBuffer( const void *data ) {
const drawBufferCommand_t *cmd;
cmd = (const drawBufferCommand_t *)data;
// finish any 2D drawing if needed
if(tess.numIndexes)
RB_EndSurface();
if (glRefConfig.framebufferObject)
FBO_Bind(NULL);
qglDrawBuffer( cmd->buffer );
// clear screen for debugging
if ( r_clear->integer ) {
qglClearColor( 1, 0, 0.5, 1 );
qglClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
}
return (const void *)(cmd + 1);
}
开发者ID:Thehsvdude,项目名称:ioq3,代码行数:28,代码来源:tr_backend.c
示例15: RE_BeginFrame
//.........这里部分代码省略.........
R_IssuePendingRenderCommands();
R_SetColorMappings();
}
// check for errors
if ( !r_ignoreGLErrors->integer ) {
int err;
R_IssuePendingRenderCommands();
if ( ( err = qglGetError() ) != GL_NO_ERROR ) {
ri.Error( ERR_FATAL, "RE_BeginFrame() - glGetError() failed (0x%x)!", err );
}
}
if (glConfig.stereoEnabled) {
if( !(cmd = R_GetCommandBuffer(sizeof(*cmd))) )
return;
cmd->commandId = RC_DRAW_BUFFER;
if ( stereoFrame == STEREO_LEFT ) {
cmd->buffer = (int)GL_BACK_LEFT;
} else if ( stereoFrame == STEREO_RIGHT ) {
cmd->buffer = (int)GL_BACK_RIGHT;
} 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);
qglClearColor(0.0f, 0.0f, 0.0f, 1.0f);
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);
r_anaglyphMode->modified = qfalse;
}
if (!Q_stricmp(r_drawBuffer->string, "GL_FRONT"))
cmd->buffer = (int)GL_FRONT;
else
cmd->buffer = (int)GL_BACK;
}
}
tr.refdef.stereoFrame = stereoFrame;
}
开发者ID:MAN-AT-ARMS,项目名称:iortcw-archive,代码行数:101,代码来源:tr_cmds.c
示例16: RE_BeginFrame
//.........这里部分代码省略.........
}
}
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;
qglClearColor(0.0f, 0.0f, 0.0f, 1.0f);
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;
}
}
tr.refdef.stereoFrame = stereoFrame;
}
开发者ID:mecwerks,项目名称:spearmint-ios,代码行数:101,代码来源:tr_cmds.c
示例17: RFB_RegisterObject
/*
* RFB_RegisterObject
*/
int RFB_RegisterObject( int width, int height, bool builtin, bool depthRB, bool stencilRB )
{
int i;
GLuint fbID;
GLuint rbID;
r_fbo_t *fbo;
if( !r_frambuffer_objects_initialized )
return 0;
for( i = 0, fbo = r_framebuffer_objects; i < r_num_framebuffer_objects; i++, fbo++ ) {
if( !fbo->objectID ) {
// free slot
goto found;
}
}
if( i == MAX_FRAMEBUFFER_OBJECTS )
{
Com_Printf( S_COLOR_YELLOW "RFB_RegisterObject: framebuffer objects limit exceeded\n" );
return 0;
}
i = r_num_framebuffer_objects++;
fbo = r_framebuffer_objects + i;
found:
qglGenFramebuffersEXT( 1, &fbID );
memset( fbo, 0, sizeof( *fbo ) );
fbo->objectID = fbID;
if( builtin )
fbo->registrationSequence = -1;
else
fbo->registrationSequence = rsh.registrationSequence;
fbo->width = width;
fbo->height = height;
qglBindFramebufferEXT( GL_FRAMEBUFFER_EXT, fbo->objectID );
#ifndef GL_ES_VERSION_2_0
// until a color texture is attached, don't enable drawing to the buffer
qglDrawBuffer( GL_NONE );
qglReadBuffer( GL_NONE );
#endif
if( depthRB )
{
int format;
qglGenRenderbuffersEXT( 1, &rbID );
fbo->depthRenderBuffer = rbID;
qglBindRenderbufferEXT( GL_RENDERBUFFER_EXT, rbID );
if( stencilRB )
format = GL_DEPTH24_STENCIL8_EXT;
else if( glConfig.ext.depth24 )
format = GL_DEPTH_COMPONENT24;
else if( glConfig.ext.depth_nonlinear )
format = GL_DEPTH_COMPONENT16_NONLINEAR_NV;
else
format = GL_DEPTH_COMPONENT16;
qglRenderbufferStorageEXT( GL_RENDERBUFFER_EXT, format, width, height );
qglFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_DEPTH_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, rbID );
if( stencilRB )
qglFramebufferRenderbufferEXT( GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_RENDERBUFFER_EXT, rbID );
qglBindRenderbufferEXT( GL_RENDERBUFFER_EXT, 0 );
}
if( r_bound_framebuffer_objectID )
qglBindFramebufferEXT( GL_FRAMEBUFFER_EXT, r_bound_framebuffer_object->objectID );
else
qglBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 );
return i+1;
}
开发者ID:Clever-Boy,项目名称:qfusion,代码行数:80,代码来源:r_framebuffer.c
示例18: qglDrawBuffer
/*
=============
RB_DrawBuffer
=============
*/
const void *RB_DrawBuffer( const void *data ) {
const drawBufferCommand_t *cmd;
cmd = (const drawBufferCommand_t *)data;
qglDrawBuffer( cmd->buffer );
// clear screen for debugging
if (tr.world && tr.refdef.doLAGoggles)
{
fog_t *fog = &tr.world->fogs[tr.world->numfogs];
qglClearColor(fog->parms.color[0], fog->parms.color[1], fog->parms.color[2], 1.0f );
qglClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
else if (tr.world && tr.world->globalFog != -1)
{
const unsigned int i = tr.world->fogs[tr.world->globalFog].colorInt;
qglClearColor( ( (byte *)&i )[0] / 255.0, ( (byte *)&i )[1] / 255.0, ( (byte *)&i )[2] / 255.0, 1.0 );
qglClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
}
else if ( r_clear->integer )
{ // clear screen for debugging
int i = r_clear->integer;
if (i == 42) {
i = Q_irand(0,8);
}
switch (i)
{
default:
qglClearColor( 1, 0, 0.5, 1 );
break;
case 1:
qglClearColor( 1.0, 0.0, 0.0, 1.0); //red
break;
case 2:
qglClearColor( 0.0, 1.0, 0.0, 1.0); //green
break;
case 3:
qglClearColor( 1.0, 1.0, 0.0, 1.0); //yellow
break;
case 4:
qglClearColor( 0.0, 0.0, 1.0, 1.0); //blue
break;
case 5:
qglClearColor( 0.0, 1.0, 1.0, 1.0); //cyan
break;
case 6:
qglClearColor( 1.0, 0.0, 1.0, 1.0); //magenta
break;
case 7:
qglClearColor( 1.0, 1.0, 1.0, 1.0); //white
break;
case 8:
qglClearColor( 0.0, 0.0, 0.0, 1.0); //black
break;
}
qglClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
}
return (const void *)(cmd + 1);
}
开发者ID:CairnTrenor,项目名称:OpenJK,代码行数:69,代码来源:tr_backend.cpp
示例19: RFB_AttachTextureToObject
/*
* RFB_AttachTextureToObject
*/
bool RFB_AttachTextureToObject( int object, bool depth, int target, image_t *texture ) {
r_fbo_t *fbo;
int attachment;
GLuint texnum = 0;
assert( object > 0 && object <= r_num_framebuffer_objects );
if( object <= 0 || object > r_num_framebuffer_objects ) {
return false;
}
if( target < 0 || target >= MAX_FRAMEBUFFER_COLOR_ATTACHMENTS ) {
return false;
}
if( target > 0 && !glConfig.ext.draw_buffers ) {
return false;
}
fbo = r_framebuffer_objects + object - 1;
qglBindFramebufferEXT( GL_FRAMEBUFFER_EXT, fbo->objectID );
bind:
if( depth ) {
attachment = GL_DEPTH_ATTACHMENT_EXT;
if( texture ) {
assert( texture->flags & IT_DEPTH );
texnum = texture->texnum;
texture->fbo = object;
}
} else {
#ifndef GL_ES_VERSION_2_0
const GLenum fboBuffers[8] = {
GL_COLOR_ATTACHMENT0_EXT,
GL_COLOR_ATTACHMENT1_EXT,
GL_COLOR_ATTACHMENT2_EXT,
GL_COLOR_ATTACHMENT3_EXT,
GL_COLOR_ATTACHMENT4_EXT,
GL_COLOR_ATTACHMENT5_EXT,
GL_COLOR_ATTACHMENT6_EXT,
GL_COLOR_ATTACHMENT7_EXT,
};
#endif
attachment = GL_COLOR_ATTACHMENT0_EXT + target;
#ifndef GL_ES_VERSION_2_0
if( target > 0 && texture ) {
qglDrawBuffersARB( target + 1, fboBuffers );
} else {
if( glConfig.ext.draw_buffers ) {
qglDrawBuffersARB( 0, fboBuffers );
}
qglDrawBuffer( GL_COLOR_ATTACHMENT0_EXT );
qglReadBuffer( GL_COLOR_ATTACHMENT0_EXT );
}
#endif
if( texture ) {
assert( !( texture->flags & IT_DEPTH ) );
texnum = texture->texnum;
texture->fbo = object;
}
}
// attach texture
qglFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, attachment, GL_TEXTURE_2D, texnum, 0 );
if( texture ) {
if( ( texture->flags & ( IT_DEPTH | IT_STENCIL ) ) == ( IT_DEPTH | IT_STENCIL ) ) {
qglFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_TEXTURE_2D, texnum, 0 );
}
}
else {
if( depth ) {
qglFramebufferTexture2DEXT( GL_FRAMEBUFFER_EXT, GL_STENCIL_ATTACHMENT_EXT, GL_TEXTURE_2D, texnum, 0 );
}
}
qglBindFramebufferEXT( GL_FRAMEBUFFER_EXT, r_bound_framebuffer_objectID ? r_bound_framebuffer_object->objectID : 0 );
// check framebuffer status and unbind if failed
if( !RFB_CheckObjectStatus() ) {
if( texture ) {
texture = NULL;
goto bind;
}
return false;
}
if( depth ) {
fbo->depthTexture = texture;
} else {
fbo->colorTexture[target] = texture;
}
return true;
}
开发者ID:adem4ik,项目名称:qfusion,代码行数:97,代码来源:r_framebuffer.c
示例20: RFB_BlitObject
/*
* RFB_BlitObject
*
* The target FBO must be equal or greater in both dimentions than
* the currently bound FBO!
*/
void RFB_BlitObject( int src, int dest, int bitMask, int mode, int filter, int readAtt, int drawAtt ) {
int bits;
int destObj;
int dx, dy, dw, dh;
r_fbo_t scrfbo;
r_fbo_t *fbo;
r_fbo_t *destfbo;
if( !glConfig.ext.framebuffer_blit ) {
return;
}
assert( src >= 0 && src <= r_num_framebuffer_objects );
if( src < 0 || src > r_num_framebuffer_objects ) {
return;
}
if( src == 0 ) {
fbo = &scrfbo;
} else {
fbo = r_framebuffer_objects + src - 1;
}
assert( dest >= 0 && dest <= r_num_framebuffer_objects );
if( dest < 0 || dest > r_num_framebuffer_objects ) {
return;
}
if( dest ) {
destfbo = r_framebuffer_objects + dest - 1;
} else {
destfbo = NULL;
}
bits = bitMask;
if( !bits ) {
return;
}
RB_ApplyScissor();
if( src == 0 ) {
memset( fbo, 0, sizeof( *fbo ) );
fbo->width = glConfig.width;
fbo->height = glConfig.height;
}
if( destfbo ) {
dw = destfbo->width;
dh = destfbo->height;
destObj = destfbo->objectID;
} else {
dw = glConfig.width;
dh = glConfig.height;
destObj = 0;
}
switch( mode ) {
case FBO_COPY_CENTREPOS:
dx = ( dw - fbo->width ) / 2;
dy = ( dh - fbo->height ) / 2;
dw = fbo->width;
dh = fbo->height;
break;
case FBO_COPY_INVERT_Y:
dx = 0;
dy = dh - fbo->height;
dw = fbo->width;
dh = fbo->height;
break;
case FBO_COPY_NORMAL_DST_SIZE:
dx = 0;
dy = 0;
//dw = dw;
//dh = dh;
break;
default:
dx = 0;
dy = 0;
dw = fbo->width;
dh = fbo->height;
break;
}
qglBindFramebufferEXT( GL_FRAMEBUFFER_EXT, 0 );
qglBindFramebufferEXT( GL_READ_FRAMEBUFFER_EXT, fbo->objectID );
qglBindFramebufferEXT( GL_DRAW_FRAMEBUFFER_EXT, destObj );
#ifndef GL_ES_VERSION_2_0
if( src == 0 ) {
qglReadBuffer( GL_BACK );
qglDrawBuffer( GL_COLOR_ATTACHMENT0_EXT + drawAtt );
} else {
qglReadBuffer( GL_COLOR_ATTACHMENT0_EXT + readAtt );
//.........这里部分代码省略.........
开发者ID:adem4ik,项目名称:qfusion,代码行数:101,代码来源:r_framebuffer.c
注:本文中的qglDrawBuffer函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论