#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);