Как код на GLSL использовать в delphi

Рейтинг: 1Ответов: 1Опубликовано: 01.03.2023

Я хочу написать шейдер на GLSL, но как код на GLSL использовать в Delphi? И как туда данные потом передавать?

Ответы

▲ 3Принят

По самым верхам, просто чтобы вам было от чего отталкиваться при поиске большого туториала, который вам нужен:

Код шейдера, это просто текст, который передается в

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