Понижение кода OpenGL 4.5 до OpenGL 3.0

#c# #opengl #opengl-3 #opengl-4

#c# #opengl #opengl-3 #opengl-4

Вопрос:

Я нашел репозиторий для решения проблемы, с которой я столкнулся с OpenGL, но все это было написано на GL 4.5, и приложение, которое я пишу, должно иметь код GL 3.0 для поддержки OSX. Я смог перевести большую часть кода, сославшись на него в документах.GL и преобразование его обратно в код 3.0, с которым я знаком.

Я немного затруднялся с пониманием приведенного ниже кода, поэтому мне просто интересно, сможет ли кто-нибудь указать мне правильное направление.

vertexArray
vertexBuffer
indexBuffer все ли int

 GL.VertexArrayVertexBuffer(vertexArray, 0, vertexBuffer, IntPtr.Zero, Unsafe.SizeOf<ImDrawVert>());
GL.VertexArrayElementBuffer(vertexArray, indexBuffer);

GL.EnableVertexArrayAttrib(vertexArray, 0);
GL.VertexArrayAttribBinding(vertexArray, 0, 0);
GL.VertexArrayAttribFormat(vertexArray, 0, 2, VertexAttribType.Float, false, 0);

GL.EnableVertexArrayAttrib(vertexArray, 1);
GL.VertexArrayAttribBinding(vertexArray, 1, 0);
GL.VertexArrayAttribFormat(vertexArray, 1, 2, VertexAttribType.Float, false, 8);

GL.EnableVertexArrayAttrib(vertexArray, 2);
GL.VertexArrayAttribBinding(vertexArray, 2, 0);
GL.VertexArrayAttribFormat(vertexArray, 2, 4, VertexAttribType.UnsignedByte, true, 16);
  

Редактировать: я использую OpenTK с C #, если кому-то интересно.

Комментарии:

1. » приложение, которое я пишу, должно иметь код GL 3.0 для поддержки OSX » macOS поддерживает GL 4.1 (при условии, что у вас есть соответствующее оборудование). Однако macOS устарел OpenGL и может удалить его практически в любое время. Поэтому вы можете не ограничивать себя такой платформой.

2. Для меня это похоже на код DSA .

Ответ №1:

Для всех, кто столкнется с этой конкретной проблемой в будущем, я должен был прочитать описание кода GL 4.5 и сопоставить его с кодом GL 3.0.

Для этого конкретного фрагмента кода он становится:

 GL.BindVertexArray(vertexArray);

GL.BindBuffer(BufferTarget.ArrayBuffer, vertexBuffer);
GL.BindBuffer(BufferTarget.ElementArrayBuffer, indexBuffer);

GL.EnableVertexAttribArray(0);
GL.VertexAttribPointer(0, 2, VertexAttribPointerType.Float, false, Unsafe.SizeOf<ImDrawVert>(), 0);

GL.EnableVertexAttribArray(1);
GL.VertexAttribPointer(1, 2, VertexAttribPointerType.Float, false, Unsafe.SizeOf<ImDrawVert>(), 8);

GL.EnableVertexAttribArray(2);
GL.VertexAttribPointer(2, 4, VertexAttribPointerType.UnsignedByte, true, Unsafe.SizeOf<ImDrawVert>(), 16);