Opengl Shader Uniform wird im Code nicht erkannt?

Ich versuche gerade OpenGl zu lernen. Und ich habe folgendes Problem, wenn ich mit glGetUniformLocation versuche meine Uniform vom Shader ausfindig zu machen findet er diesen uniform einfach nicht. Habt ihr eine Idee wieso?

Mein Code:

const char* vertexShaderSource = R"(
    #version 460 core


    uniform vec3 transformation;


    in vec3 position;
    out vec4 color;


    void main()
    {
        gl_Position = vec4(position, 1.0);
        color = vec4(1.0, 1.0, 0.0, 1.0);
    }
)";


const char* fragmentShaderSource = R"(
    #version 460 core


    in vec4 color;
    out vec4 outColor;


    void main()
    {
        outColor = color;
    }
)";

int main()
{
    SDL_Init(SDL_INIT_VIDEO);
    Window2D window2D("Debug", 800, 600);
    gladLoadGL();
    glViewport(0, 0, 800, 600);


    //Dreieck vertices


    float vertices[] = {
        -0.5f, -0.5f, 0.0f,
        0.5f, -0.5f, 0.0f,
        0.0f, 0.5f, 0.0f
    };


    //Shader
    //Vertex Shader
    GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);
    glShaderSource(vertexShader, 1, &vertexShaderSource, NULL);
    glCompileShader(vertexShader);


    //Fragment Shader
    GLuint fragmentShader = glCreateShader(GL_FRAGMENT_SHADER);
    glShaderSource(fragmentShader, 1, &fragmentShaderSource, NULL);


    //Programm
    GLuint program = glCreateProgram();
    glAttachShader(program, vertexShader);
    glAttachShader(program, fragmentShader);
    glLinkProgram(program);


    //Uniform
    GLint uniform = glGetUniformLocation(program, "transformation");
    if (uniform == -1) {
    std::cerr << "Error: Not Found" << std::endl;
    }


    //Shader


    //VBO and VAO
    GLuint VBO, VAO;
    glGenVertexArrays(1, &VAO);
    glGenBuffers(1, &VBO);


    glBindVertexArray(VAO);


    glBindBuffer(GL_ARRAY_BUFFER, VBO);
    glBufferData(GL_ARRAY_BUFFER, sizeof(vertices), vertices, GL_STATIC_DRAW);


    glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 3 * sizeof(float), (void*) 0);
    glEnableVertexAttribArray(0);


    glBindBuffer(GL_ARRAY_BUFFER, 0);
    glBindVertexArray(0);


    while(window2D.windowRun() == false)
    {
        glClearColor(0.2f, 0.3f, 0.3f, 1.0f);
        glClear(GL_COLOR_BUFFER_BIT);


        glUseProgram(program);


        glBindVertexArray(VAO);
        glDrawArrays(GL_TRIANGLES, 0, 3);
    }
    window2D.closeWindow();
    return 0;
}

Sonst funktioniert tatsächlich alles, das Dreieck wird Gelb angezeigt nur der Uniform funktioniert nicht.

CPP, Informatik, OpenGL, Spieleprogrammierung, GLSL
Linux für Kinder / Programmieren mit Scratch 3?

Ich habe einen 8 jährigen Neffen, der wenn er groß ist gerne „Spieleprogrammierer“ werden will. Also hab ich mir überlegt, ihm einen Laptop mit Linux zu schenken und ein Buch für Kinder, zu der Programmiersprache Scratch 3. Jetzt wollte ich mal fragen, was es noch für spezielle Linux Distros gibt, die für Kinder empfehlenswert sind. Kenne noch von früher Edubuntu und Qimo. Das Qimo Projekt wurde eingestellt und Edubuntu richtet sich wohl heute mehr an Schulklassen. Für den 8 jährigen könnte ich vielleicht Edubuntu nehmen, allerdings hab ich noch einen 4 jährigen Neffen, dem ich eins meiner alten Netbooks geben möchte, quasi als Lerncomputer. Da er auch gerne einen eigenen Laptop möchte. Wichtig wäre, dass es eine Distro ist, die auch noch auf alter 32 Bit Hardware läuft. Prozessor ist ein Intel Atom. Die Distro sollte schon etwas verspielt sein, passend für kleine Kinder und auch Lernspiele enthalten, die ein Kind in dem Alter spielen kann. Man könnte natürlich auch eine normale Distro nehmen und die entsprechend anpassen, aber wenn es schon fertige und durchdachte Distros für Kinder gibt, spart man sich das und es sieht vielleicht auch besser aus.

Und zum Thema Scratch 3:

Wie könnte man anfangen? Gibt es mittlerweile eigentlich wieder eine lokal installierbare Version von Scratch für Linux? Nach der Umstellung damals gab es diese ja anfangs nur für Windows und Mac und für Linux nur eine Browser Version. Auf der Scratch Seite selbst ist keine Download Version für Linux (außer Android) zu finden, aber vielleicht gibts da ja einen Trick, es doch installiert zu bekommen, so dass es voll funktionsfähig und lokal auf der Festplatte ist.

Kaufen wollte ich ihm dieses Buch: https://www.ebay.de/itm/225581226065?epid=22054114427&hash=item3485b05851:g:GX4AAOSwke9kZSiO

Oder wäre ein anderes besser geeignet?

Er soll ja Interesse daran entwickeln und Spaß dabei haben und es auch verstehen können.

Bild zum Beitrag
Kinder, Notebook, Linux, programmieren, Ubuntu, Netbook, Programmiersprache, Spieleprogrammierung, Linux-Distribution
C++ Snake programmieren, aber wie?

Hallo, ich schreibe gerade an einem Spiel(Snake) in c++. Ich weiß aber nicht wie ich die punkte einfüge die die schlange dann einsammeln kann, wie ich die Schlange länger mache und wie ich die kollision zwischen schlangenkopf und schlangenkörper integriere.

Hier mein bisheriger code:

include <conio.h> include <Windows.h> include

using namespace std;

const int rechts = 'd'; const int links = 'a'; const int hoch = 'w'; const int runter = 's'; const int prechts = 0x4d; //Hexadezimale codes der Pfeiltasten const int plinks = 0x4b; const int phoch = 0x48; const int prunter = 0x50;

void Bewegung(int, int);

int main() { bool ende = false; int x = 12; //x Koordniate (erst definition = Startpunkt) int < = 10; //y Koordniate (erst definition = Startpunkt) int richtung = 1; int punkt = 0;

cout << "Punkte " << punkte << endl; cout <<"XXXXXXXXXXXXXXXXXXXXXXXXX"<<endl; for(int i = 1; i < 24; i++) { cout << "X X"<<endl; } cout <<"XXXXXXXXXXXXXXXXXXXXXXXXX"<<endl;

do { Bewegung(x, y); cout << "o";

if(kbhit()) { int taste = getch(); if(!taste || taste == 0xe0)) taste = getch();

if(taste == hoch && richtung != 2 || taste == phoch && richtung != 2) { richtung = 1; --y; }

else if(taste == runter && richtung != 1 || taste == prunter && richtung != 1) { richtung = 2; ++y; }

else if(taste == rechts && richtung != 4 || taste == prechts && richtung != 4) { richtung = 3; ++x; }

else if(taste == links && richtung != 3 || taste == plinks && richtung != 3)

else { continue; }

Sleep(150); }

else if(!kbhit()) { if(richtung == 1) { --y; } if(richtung == 2) { ++y; } if(richtung == 3) { ++x; } if(richtung == 4) { --x; } Sleep(150); }

system("cls");

if( x <= 0 || x >= 24 || x <= 1 || y >= 25) { cout << "Game Over!" << endl << endl; cout << "Du hast " << punkte << " Punkte erreicht" << endl << endl; system("pause"); return 0; }

cout << "Punkte " << punkte << endl; cout <<"XXXXXXXXXXXXXXXXXXXXXXXXX"<<endl; for(int i = 1; i < 24; i++) { cout << "X X"<<endl; } cout <<"XXXXXXXXXXXXXXXXXXXXXXXXX"<<endl;

}while(true);

return 0; }

void Bewegung(int b, int h) { COORD punkt; punkt.X = b; punkt.Y = h; SetConsoleCursorPosition(GetStdHandle(STDOUTPUTHANDLE), punkt); }

Computer, IT, programmieren, Cplusplus, snake, Spieleprogrammierung

Meistgelesene Fragen zum Thema Spieleprogrammierung