Я пытаюсь нарисовать черную одну строку на GLKitView
, используя Swift
, но это не сработает. Я могу очистить экран, и я могу заполнить его любым цветом, но я ничего не могу на нем нарисовать. И я знаю, этот вопрос задавали много раз, но я не мог найти ответа на Свифт. Более того, нет никакой информации об использовании OpenGL ES с Swift, поэтому я пришел сюда.Swift - Как нарисовать линию в OpenGL ES?
Вот мой код:
import GLKit
class MyGLKit: GLKView {
override func drawRect(rect: CGRect) {
glClearColor(0.8, 0.8, 0.8, 1.0)
glClear(GLbitfield(GL_COLOR_BUFFER_BIT))
glColor4f(0, 0, 0, 1)
var line: [GLfloat] = [-1, 0, 1, 0]
var len = line.count * sizeof(GLfloat)
// Create an handle for a buffer object array
var bufferObjectNameArray: GLuint = 0
// Have OpenGL generate a buffer name and store it in the buffer object array
glGenBuffers(1, &bufferObjectNameArray);
// Bind the buffer object array to the GL_ARRAY_BUFFER target buffer
glBindBuffer(GLbitfield(GL_ARRAY_BUFFER), bufferObjectNameArray);
// Send the line data over to the target buffer in GPU RAM
glBufferData(
GLbitfield(GL_ARRAY_BUFFER), // the target buffer
len, // the number of bytes to put into the buffer
line, // a pointer to the data being copied
GLbitfield(GL_STATIC_DRAW)); // the usage pattern of the data
glVertexPointer(2, GLbitfield(GL_FLOAT), 0, line);
var programHandle: GLuint = glCreateProgram()
glLinkProgram(programHandle)
glDrawArrays(GLbitfield(GL_LINES), 0, 2);
}
}
Я не уверен, что этот код делает, потому что OpenGL ES кажется безумно, после обычного OpenGL. Я имею в виду, вам нужно написать много кода, чтобы нарисовать одну строку. Почему это работает?
Вам понадобится вызов 'glVertexPointer()', который вы закомментировали. Но используйте «0» в качестве последнего аргумента, так как это смещение в буфер, если буфер связан. –
@RetoKoradi Я не могу использовать '0' в качестве последнего аргумента, потому что XCode говорит' Невозможно вызвать 'init' с помощью списка аргументов типа '(IntegerLiteralConvertible, $ T3, IntegerLiteralConvertible, IntegerLiteralConvertible)' '. Последний аргумент _ Указывает указатель на первую координату первой вершины в массиве_. Поэтому он должен быть указателем на первый элемент массива. Но как это сделать? –
Я согласен с OP, OpenGL-ES с быстрым - 'безумный'. Я просто хочу провести чертову линию от точки А до точки Б. Почему, черт возьми, это требует 20+ строк кода gl? Почему это не примитив? +1 для 'insane' –