Probleme mit ivec2 im Fragmentshader



  • Hallo,

    ich habe einen minimalen shader zusammengebaut der auch funktioniert, solange ich vec2 bei der deklaration im Vertexshader verwende:

    Im c++ Programm

    //Initialisierung
    int *vertexTexcoordPositions = new int [6];
    
    		vertexTexcoordPositions[0] =0;
    		vertexTexcoordPositions[1] =0 ;
    
    		vertexTexcoordPositions[2] =1;
    		vertexTexcoordPositions[3] =0;
    
    		vertexTexcoordPositions[4] =0;
    		vertexTexcoordPositions[5] =1;
    
        glGenBuffers(1, &vertexPositionsBufferObject);
    
        GLuint  vertexTexcoordPositionsBufferObject;	
    	glBindBuffer(GL_ARRAY_BUFFER, vertexTexcoordPositionsBufferObject);
    	glBufferData(GL_ARRAY_BUFFER, sizeof(int)*6,vertexTexcoordPositions, GL_DYNAMIC_DRAW );
    	glBindBuffer(GL_ARRAY_BUFFER, 0);
    
    //in der Zeichenschleife
    
        glPolygonMode(GL_FRONT, GL_LINE);
        glPolygonMode(GL_BACK, GL_LINE);
    
        glBindBuffer(GL_ARRAY_BUFFER, vertexTexcoordPositionsBufferObject);
    	glEnableVertexAttribArray(glGetAttribLocation (myShader->getProgram(),  "vertexPosition"));
    
    	int help =glGetAttribLocation (myShader->getProgram(),  "vertexPosition");
    	glVertexAttribPointer(help, 2, GL_INT, GL_FALSE, 0, BUFFER_OFFSET(0));
    
    	glDrawArrays(GL_TRIANGLES, 0, 3);
    
    	glDisableVertexAttribArray(glGetAttribLocation (myShader->getProgram(),  "vertexPosition"));
    

    Im vertex Shader

    #version 330
    #extension GL_EXT_gpu_shader4 : enable
    
    in vec2 vertexPosition;	
    
    void main()
    {
    
        gl_Position =  vec4(vertexPosition,1, 1);
    
    }
    

    Im Fragmentshader

    #extension GL_EXT_gpu_shader4 : enable
    void main()
    {
              gl_FragColor   = vec4(1.0, 1.0, 1.0, 0.0);
    
    }
    

    Zu sehen ist ein Dreieck aus Linien. Genau so wie es sein soll.
    http://imageshack.us/photo/my-images/40/26561552.jpg/

    Ändere ich im Vertexshader aber die folgende Zeile:

    in vec2 vertexPosition;
    

    in

    in ivec2 vertexPosition;
    

    also in integer Vectoren (Ich übergebe ja auch integer im C++ Programm an den shader.)
    So ist das Dreieck viel zu gross:

    http://imageshack.us/photo/my-images/43/72896500.jpg/

    Wenn ich das Dreieck verschoben anzeige sieht man, dass die Linien nahezu ins unendliche gehen.

    Wodurch entsteht dieses Problem bei der Verwendung von Ganzzahl-Vektoren (ivec2)?
    Und wie kann ich Ganzzahlvektoren verwenden ohne diese Probleme zu bekommen?

    (Das Problem tritt nicht auf, wenn ich keine VBOs verwende und Zusatzdaten als Uniform-Variablen in Form von ivec2 übergebe)


Anmelden zum Antworten