-PicoSurface(){
- constructNull();
- CaptureShader();
-}
-PicoSurface( picoSurface_t* surface ){
- CopyPicoSurface( surface );
- CaptureShader();
-}
-~PicoSurface(){
- ReleaseShader();
-}
-
-void render( RenderStateFlags state ) const {
- if ( ( state & RENDER_BUMP ) != 0 ) {
- if ( GlobalShaderCache().useShaderLanguage() ) {
- glNormalPointer( GL_FLOAT, sizeof( ArbitraryMeshVertex ), &m_vertices.data()->normal );
- glVertexAttribPointerARB( c_attr_TexCoord0, 2, GL_FLOAT, 0, sizeof( ArbitraryMeshVertex ), &m_vertices.data()->texcoord );
- glVertexAttribPointerARB( c_attr_Tangent, 3, GL_FLOAT, 0, sizeof( ArbitraryMeshVertex ), &m_vertices.data()->tangent );
- glVertexAttribPointerARB( c_attr_Binormal, 3, GL_FLOAT, 0, sizeof( ArbitraryMeshVertex ), &m_vertices.data()->bitangent );
- }
- else
- {
- glVertexAttribPointerARB( 11, 3, GL_FLOAT, 0, sizeof( ArbitraryMeshVertex ), &m_vertices.data()->normal );
- glVertexAttribPointerARB( 8, 2, GL_FLOAT, 0, sizeof( ArbitraryMeshVertex ), &m_vertices.data()->texcoord );
- glVertexAttribPointerARB( 9, 3, GL_FLOAT, 0, sizeof( ArbitraryMeshVertex ), &m_vertices.data()->tangent );
- glVertexAttribPointerARB( 10, 3, GL_FLOAT, 0, sizeof( ArbitraryMeshVertex ), &m_vertices.data()->bitangent );
- }
- }
- else
- {
- glNormalPointer( GL_FLOAT, sizeof( ArbitraryMeshVertex ), &m_vertices.data()->normal );
- glTexCoordPointer( 2, GL_FLOAT, sizeof( ArbitraryMeshVertex ), &m_vertices.data()->texcoord );
- }
- glVertexPointer( 3, GL_FLOAT, sizeof( ArbitraryMeshVertex ), &m_vertices.data()->vertex );
- glDrawElements( GL_TRIANGLES, GLsizei( m_indices.size() ), RenderIndexTypeID, m_indices.data() );
-
-#if defined( _DEBUG )
- GLfloat modelview[16];
- glGetFloatv( GL_MODELVIEW_MATRIX, modelview ); // I know this is slow as hell, but hey - we're in _DEBUG
- Matrix4 modelview_inv(
- modelview[0], modelview[1], modelview[2], modelview[3],
- modelview[4], modelview[5], modelview[6], modelview[7],
- modelview[8], modelview[9], modelview[10], modelview[11],
- modelview[12], modelview[13], modelview[14], modelview[15] );
- matrix4_full_invert( modelview_inv );
- Matrix4 modelview_inv_transposed = matrix4_transposed( modelview_inv );
-
- glBegin( GL_LINES );
-
- for ( Array<ArbitraryMeshVertex>::const_iterator i = m_vertices.begin(); i != m_vertices.end(); ++i )
- {
- Vector3 normal = normal3f_to_vector3( ( *i ).normal );
- normal = matrix4_transformed_direction( modelview_inv, vector3_normalised( matrix4_transformed_direction( modelview_inv_transposed, normal ) ) ); // do some magic
- Vector3 normalTransformed = vector3_added( vertex3f_to_vector3( ( *i ).vertex ), vector3_scaled( normal, 8 ) );
- glVertex3fv( vertex3f_to_array( ( *i ).vertex ) );
- glVertex3fv( vector3_to_array( normalTransformed ) );
- }
- glEnd();
+ PicoSurface()
+ {
+ constructNull();
+ CaptureShader();
+ }
+
+ PicoSurface(picoSurface_t *surface)
+ {
+ CopyPicoSurface(surface);
+ CaptureShader();
+ }
+
+ ~PicoSurface()
+ {
+ ReleaseShader();
+ }
+
+ void render(RenderStateFlags state) const
+ {
+ if ((state & RENDER_BUMP) != 0) {
+ if (GlobalShaderCache().useShaderLanguage()) {
+ glNormalPointer(GL_FLOAT, sizeof(ArbitraryMeshVertex), &m_vertices.data()->normal);
+ glVertexAttribPointerARB(c_attr_TexCoord0, 2, GL_FLOAT, 0, sizeof(ArbitraryMeshVertex),
+ &m_vertices.data()->texcoord);
+ glVertexAttribPointerARB(c_attr_Tangent, 3, GL_FLOAT, 0, sizeof(ArbitraryMeshVertex),
+ &m_vertices.data()->tangent);
+ glVertexAttribPointerARB(c_attr_Binormal, 3, GL_FLOAT, 0, sizeof(ArbitraryMeshVertex),
+ &m_vertices.data()->bitangent);
+ } else {
+ glVertexAttribPointerARB(11, 3, GL_FLOAT, 0, sizeof(ArbitraryMeshVertex), &m_vertices.data()->normal);
+ glVertexAttribPointerARB(8, 2, GL_FLOAT, 0, sizeof(ArbitraryMeshVertex), &m_vertices.data()->texcoord);
+ glVertexAttribPointerARB(9, 3, GL_FLOAT, 0, sizeof(ArbitraryMeshVertex), &m_vertices.data()->tangent);
+ glVertexAttribPointerARB(10, 3, GL_FLOAT, 0, sizeof(ArbitraryMeshVertex),
+ &m_vertices.data()->bitangent);
+ }
+ } else {
+ glNormalPointer(GL_FLOAT, sizeof(ArbitraryMeshVertex), &m_vertices.data()->normal);
+ glTexCoordPointer(2, GL_FLOAT, sizeof(ArbitraryMeshVertex), &m_vertices.data()->texcoord);
+ }
+ glVertexPointer(3, GL_FLOAT, sizeof(ArbitraryMeshVertex), &m_vertices.data()->vertex);
+ glDrawElements(GL_TRIANGLES, GLsizei(m_indices.size()), RenderIndexTypeID, m_indices.data());
+
+#if GDEF_DEBUG
+ GLfloat modelview[16];
+ glGetFloatv(GL_MODELVIEW_MATRIX, modelview); // I know this is slow as hell, but hey - we're in _DEBUG
+ Matrix4 modelview_inv(
+ modelview[0], modelview[1], modelview[2], modelview[3],
+ modelview[4], modelview[5], modelview[6], modelview[7],
+ modelview[8], modelview[9], modelview[10], modelview[11],
+ modelview[12], modelview[13], modelview[14], modelview[15]);
+ matrix4_full_invert(modelview_inv);
+ Matrix4 modelview_inv_transposed = matrix4_transposed(modelview_inv);
+
+ glBegin(GL_LINES);
+
+ for (Array<ArbitraryMeshVertex>::const_iterator i = m_vertices.begin(); i != m_vertices.end(); ++i) {
+ Vector3 normal = normal3f_to_vector3((*i).normal);
+ normal = matrix4_transformed_direction(modelview_inv, vector3_normalised(
+ matrix4_transformed_direction(modelview_inv_transposed, normal))); // do some magic
+ Vector3 normalTransformed = vector3_added(vertex3f_to_vector3((*i).vertex), vector3_scaled(normal, 8));
+ glVertex3fv(vertex3f_to_array((*i).vertex));
+ glVertex3fv(vector3_to_array(normalTransformed));
+ }
+ glEnd();