//----------------------------------------------------------------------------- void Texture::draw(const RECT &r) const { glBindTexture (GL_TEXTURE_2D, texture); glBegin (GL_TRIANGLE_STRIP); glTexCoord2s(0,1); glVertex2i(r.left, r.bottom); glTexCoord2s(1,1); glVertex2i(r.right, r.bottom); glTexCoord2s(0,0); glVertex2i(r.left, r.top); glTexCoord2s(1,0); glVertex2i(r.right, r.top); glEnd(); }
void Canvas::DrawRenderTexture() { if( !m_render_texture ) { return; } if( !non_legacy_supported ) { // Matrix mode is currently GL_TEXTURE as set by Renderer. // We get ready for a surprise from SFML... CheckGLError( glPushMatrix() ); sf::Texture::bind( &( m_render_texture->getTexture() ) ); if( !m_display_list ) { m_display_list = glGenLists( 1 ); if( !m_display_list ) { #if defined( SFGUI_DEBUG ) std::cerr << "SFGUI warning: Canvas failed to create OpenGL display list.\n"; #endif } CheckGLError( glNewList( m_display_list, GL_COMPILE ) ); // Pop the texture matrix that SFML secretly loaded behind our backs... CheckGLError( glMatrixMode( GL_TEXTURE ) ); CheckGLError( glPopMatrix() ); CheckGLError( glColor3ub( 255, 255, 255 ) ); // Oh the horror... not. CheckGLError( glMatrixMode( GL_MODELVIEW ) ); CheckGLError( glPushMatrix() ); CheckGLError( glLoadIdentity() ); CheckGLError( glMatrixMode( GL_PROJECTION ) ); CheckGLError( glPushMatrix() ); CheckGLError( glLoadIdentity() ); CheckGLError( glBegin( GL_QUADS ) ); CheckGLError( glTexCoord2s( 0, 0 ) ); CheckGLError( glVertex2s( -1, -1 ) ); CheckGLError( glTexCoord2s( 1, 0 ) ); CheckGLError( glVertex2s( 1, -1 ) ); CheckGLError( glTexCoord2s( 1, 1 ) ); CheckGLError( glVertex2s( 1, 1 ) ); CheckGLError( glTexCoord2s( 0, 1 ) ); CheckGLError( glVertex2s( -1, 1 ) ); CheckGLError( glEnd() ); CheckGLError( glPopMatrix() ); CheckGLError( glMatrixMode( GL_MODELVIEW ) ); CheckGLError( glPopMatrix() ); CheckGLError( glMatrixMode( GL_TEXTURE ) ); CheckGLError( glEndList() ); } CheckGLError( glCallList( m_display_list ) ); } else { // Non-Legacy if( !m_shader ) { SetupShader(); } if( !non_legacy_supported ) { // Fall back to legacy starting in this frame. DrawRenderTexture(); return; } if( !m_vbo ) { SetupVBO(); } auto is_vertex_array = CheckGLError( GLEXT_glIsVertexArray( m_vao ) ); if( !is_vertex_array ) { SetupVAO(); } struct Texture : sf::GlResource { sf::Vector2u unused1; sf::Vector2u unused2; unsigned int unused3; bool unused4; bool unused5; mutable bool pixels_flipped; sf::Uint64 unused6; }; // Just so that SFML doesn't mess with the texture matrix. const_cast<Texture*>( reinterpret_cast<const Texture*>( &( m_render_texture->getTexture() ) ) )->pixels_flipped = false; sf::Shader::bind( m_shader.get() ); CheckGLError( GLEXT_glBindVertexArray( m_vao ) ); CheckGLError( glDrawArrays( GL_TRIANGLE_STRIP, 0, 4 ) ); CheckGLError( GLEXT_glBindVertexArray( 0 ) ); sf::Shader::bind( nullptr ); } }
M(void, glTexCoord2s, jshort s, jshort t) { glTexCoord2s(s, t); }
inline void glTexCoord( const GLshort & s, const GLshort & t ) { glTexCoord2s( s, t ); }
///////////////////////////////////////////////////////// // Render // void GEMglTexCoord2s :: render(GemState *state) { glTexCoord2s (s, t); }