Как код на GLSL использовать в delphi
Я хочу написать шейдер на GLSL, но как код на GLSL использовать в Delphi? И как туда данные потом передавать?
Источник: Stack Overflow на русском
Я хочу написать шейдер на GLSL, но как код на GLSL использовать в Delphi? И как туда данные потом передавать?
По самым верхам, просто чтобы вам было от чего отталкиваться при поиске большого туториала, который вам нужен:
Код шейдера, это просто текст, который передается в
Result := glCreateShader(aType); // GL_VERTEX_SHADER или GL_FRAGMENT_SHADER
len := Length(code);
glShaderSource(Result, 1, PPGLchar(@code), @len);
glCompileShader(Result);
Затем оба шейдера связываются в программу
programObject := glCreateProgram;
glAttachShader(ProgramHandle, vertexShader);
glAttachShader(ProgramHandle, fragmentShader);
glLinkProgram(ProgramHandle);
Потом в них делаются поиск атрибутов и переменных
vaPosition := glGetAttribLocation(ProgramHandle, 'vaPosition');
mView := glGetUniformLocation(ProgramHandle, 'mView');
А данные при отрисовке передаются вот так
glBindBuffer(GL_ARRAY_BUFFER, fVtx);
glBindVertexArray(fVao);
glUseProgram(ProgramHandle);
glVertexAttribPointer(vaPosition, 3, GL_FLOAT, VAO_FALSE, 12, Pointer(0));
glEnableVertexAttribArray(vaPosition);
glUniformMatrix4fv(mView, 1, VAO_FALSE, @fMatView);
Все завязки на OpenGL функции в Delphi сделаны через dglOpenGL.pas