Собственные шейдеры в delphi не отрисовывают

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

Написал на glsl свои вертексные и фрагментные шейдеры, но не могу понять почему не работает отрисовка:

Установка начальных параметров и создание шейдеров:

  FDC := GetDC(Handle);
  FRC := CreateRenderingContext(FDC, [opDoubleBuffered], 32, 24, 0, 0, 0, 0);
  ActivateRenderingContext(FDC, FRC);
  glClearColor(0, 0, 0, 0);


  //======================
  // Создание вершинного шейдера
  vertexShader := glCreateShader(GL_VERTEX_SHADER);
  vertexPtr := PChar(
    '#version 120' + sLineBreak +
    'attribute vec2 aPosition;' + sLineBreak +
    'void main() {' + sLineBreak +
    '  gl_Position = vec4(aPosition, 0.0, 1.0);' + sLineBreak +
    '}');
  glShaderSource(vertexShader, 1, @vertexPtr, nil);
  glCompileShader(vertexShader);

  // Создание фрагментного шейдера
  fragmentShader := glCreateShader(GL_FRAGMENT_SHADER);
  vertexPtr := PChar(
    '#version 120' + sLineBreak +
    'void main() {' + sLineBreak +
    '  gl_FragColor = vec4(1.0, 0.86, 0.6, 1.0);' + sLineBreak +
    '}');
  glShaderSource(fragmentShader, 1, @vertexPtr, nil);
  glCompileShader(fragmentShader);

  //Создание программы шейдеров (предварительная сборка)
  programHandle := glCreateProgram();
  glAttachShader(programHandle, vertexShader);
  glAttachShader(programHandle, fragmentShader);
  glLinkProgram(programHandle);
  glUseProgram(programHandle);

Рендер:

  glGenBuffers(1, @VBO);
  glBindBuffer(GL_ARRAY_BUFFER, VBO);
  glBufferData(GL_ARRAY_BUFFER, SizeOf(VertexArray), @VertexArray[0], GL_STATIC_DRAW);
  aPositionIndex := glGetAttribLocation(Unit1.ProgramHandle, 'aPosition');

  glEnableVertexAttribArray(aPositionIndex);
  glVertexAttribPointer(aPositionIndex, 3, GL_FLOAT, false, 0, nil);///

  glEnableClientState(GL_VERTEX_ARRAY);
  glDrawArrays(GL_TRIANGLES, 0, 6);
  //glDrawElements(GL_TRIANGLES, Length(VertexIndexes), GL_UNSIGNED_INT, VertexIndexes);
  glDisableClientState(GL_VERTEX_ARRAY);
  SwapBuffers(FDC);
  glDeleteBuffers(1, @VBO);

Данные:

VertexArray: array[0..14] of GLfloat = (-0.5, 0.5, 0.0,
                                        -0.5,-0.5, 0.0,
                                         0.5,-0.5, 0.0,
                                         0.5, 0.5, 0.0,
                                        -0.5, 0.5, 0.0);

Ответы

Ответов пока нет.