My application simply loads an image as a Texture & rotate it in Z-axis.This is my code.
----Beginning of code----
Reference Source code.
http://www.opengl.org/sdk/docs/tutor...SL_Texture.zip
main.cpp
Code :virtual void OnInit() { glClearColor(0.0f,0.0f,0.0f,0.0f); glShadeModel(GL_SMOOTH); glEnable(GL_DEPTH_TEST); glEnable(GL_TEXTURE_2D); shader = SM.loadfromFile("vertexshader.txt","fragmentshader.txt"); // load (and compile, link) from file if (shader==0) std::cout << "Error Loading, compiling or linking shader\n"; else { ProgramObject = shader->GetProgramObject(); locAngle = glGetUniformLocation(ProgramObject, "uAngle"); } // Create a Texture from file. pTexture = cwc::TextureFactory::CreateTextureFromFile("Penguins.jpg"); if (!pTexture) std::cout << "***WARNING: Failed loading texture!!\n"; } virtual void OnRender(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); if (pTexture) { pTexture->bind(0); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST); // Disable Filtering! } if (shader) { shader->begin(); glUniform1f(locAngle, angle); } if (shader) shader->setUniform1i("myTexture", 0); glBegin(GL_QUADS); glTexCoord2f(0.0f, 0.0f); glVertex3f(-glXpos, -glYpos, glZpos);//Left Bottom glTexCoord2f(1.0f, 0.0f); glVertex3f( glXpos, -glYpos, glZpos);//Right Bottom glTexCoord2f(1.0f, 1.0f); glVertex3f( glXpos, glYpos, glZpos);//Right Top glTexCoord2f(0.0f, 1.0f); glVertex3f(-glXpos, glYpos, glZpos);//Left Top glEnd(); if (shader) shader->end(); glutSwapBuffers(); }
Vertex Shader Source:
Fragment Shader Source:Code :uniform float uAngle; varying vec2 vTexCoord; attribute vec4 position; void main(void) { mat3 rotation = mat3 ( vec3( cos(uAngle), sin(uAngle), 0.0), vec3(-sin(uAngle), cos(uAngle), 0.0), vec3( 0.0, 0.0, 1.0) ); vec3 projected_position = rotation * position.xyz; vTexCoord = gl_MultiTexCoord0.xy; gl_Position = gl_ModelViewProjectionMatrix * vec4(projected_position, 1.0); }
----End----Code :uniform sampler2D myTexture; varying vec2 vTexCoord; void main (void) { vec4 color = texture2D(myTexture, vTexCoord); gl_FragColor = color; }
Now my question is when i run this application in my PC it runs well(Spec:nvidia Geforce 210 GPU ,Processor:Intel 3 GHz)
But it consumes 50-55% of processor usage in my PC whereas it consumes only 2-8% of processor usage in some other PC's.
I've also tried to do the same Image Rotation using glRotate() & through custom Rotation matrix methods. it consumes only 0-2% of processor usage only.
How glRotate() consumes only 1 of processor usage?
What causes this increased Processor usage?
What are the factors which affect this GLSL performance?
Experts please help me on this. Thank you.