本文整理汇总了C++中OpenGLTexture::Bind方法的典型用法代码示例。如果您正苦于以下问题:C++ OpenGLTexture::Bind方法的具体用法?C++ OpenGLTexture::Bind怎么用?C++ OpenGLTexture::Bind使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OpenGLTexture
的用法示例。
在下文中一共展示了OpenGLTexture::Bind方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Blit
int OpenGLGraphics::Blit ( Uint32 _sourceSurfaceID, SDL_Rect const *_sourceRect,
Uint32 _destSurfaceID, SDL_Rect const *_destRect )
{
ARCReleaseAssert ( m_sdlScreen != NULL );
OpenGLTexture *fromSurface = NULL;
OpenGLTexture *toSurface = NULL;
SDL_Rect *sourceRect = NULL;
SDL_Rect *destRect = NULL;
if ( _sourceSurfaceID == SCREEN_SURFACE_ID )
{
// trying to blit from screen?
// not at the moment, sadly
return -1;
}
// Get the SDL surface for the source surface.
ARCReleaseAssert ( m_textures.valid ( _sourceSurfaceID ) );
fromSurface = m_textures.get ( _sourceSurfaceID );
ARCReleaseAssert ( fromSurface != NULL );
// Get the SDL surface for the destination surface.
if ( _destSurfaceID != SCREEN_SURFACE_ID )
{
ARCReleaseAssert ( m_textures.valid ( _destSurfaceID ) );
toSurface = m_textures.get ( _destSurfaceID );
ARCReleaseAssert ( toSurface != NULL );
} else {
toSurface = m_sdlScreen;
}
// With SDL, you can have a NULL destination rectangle if you are just
// writing to 0,0 and the max possible WxH on the surface.
SDL_Rect nullDestRect;
if ( !_destRect )
{
nullDestRect.x = 0; nullDestRect.y = 0;
nullDestRect.w = m_sdlScreen->m_sdlSurface->w;
nullDestRect.h = m_sdlScreen->m_sdlSurface->h;
destRect = &nullDestRect;
} else {
memcpy ( &nullDestRect, _destRect, sizeof(SDL_Rect) );
destRect = &nullDestRect;
}
// With SDL, you can have a NULL source rectangle if you are just
// reading from 0,0 and the max possible WxH on the surface.
SDL_Rect nullSourceRect;
if ( !_sourceRect )
{
nullSourceRect.x = 0; nullSourceRect.y = 0;
if ( g_openGL->GetSetting ( OPENGL_TEX_ALLOW_NPOT, false ) ) {
nullSourceRect.w = fromSurface->m_sdlSurface->w;
nullSourceRect.h = fromSurface->m_sdlSurface->h;
} else {
nullSourceRect.w = fromSurface->m_originalWidth;
nullSourceRect.h = fromSurface->m_originalHeight;
}
sourceRect = &nullSourceRect;
} else {
memcpy ( &nullSourceRect, _sourceRect, sizeof(SDL_Rect) );
sourceRect = &nullSourceRect;
}
if ( destRect->x > toSurface->m_sdlSurface->w ) {
// This blit is completely off the surface.
return 1;
}
if ( destRect->y > toSurface->m_sdlSurface->h ) {
// This blit is completely off the surface.
return 1;
}
// Is this blit is going to be partially off the surface?
if ( destRect->x + sourceRect->w > toSurface->m_sdlSurface->w )
sourceRect->w = toSurface->m_sdlSurface->w - destRect->x;
if ( destRect->y + sourceRect->h > toSurface->m_sdlSurface->h )
sourceRect->h = toSurface->m_sdlSurface->h - destRect->y;
// With SDL, you don't have to specify the dest width/height. With OpenGL, we do.
destRect->w = sourceRect->w;
destRect->h = sourceRect->h;
// Now we need to do the actual blit!
if ( _destSurfaceID == SCREEN_SURFACE_ID )
{
fromSurface->Upload();
// draw from sourceSurfaceID
g_openGL->ActivateTextureRect();
fromSurface->Bind();
g_openGL->ActivateWhiteWithAlpha ( fromSurface->m_alpha );
g_openGL->VertexArrayStateTexture ();
short *vertexArray = m_vertexArray, *texCoordArrayi = m_texCoordArrayi;
float *texCoordArrayf = m_texCoordArrayf;
vertexArray = m_vertexArray;
//.........这里部分代码省略.........