LINUX.ORG.RU

OpenGL ES

 ,


0

1

Изучаю opengl es. Проблема такая: практически сразу после инициализации opengl вызываю glEnableClientState(GL_VERTEX_ARRAY), чтобы потом задать массив вершин и таки что-то изобразить на экране.Однако glGetError выдает GL_INVALID_OPERATION.Соответственно ни массив не могу передать, ни нарисовать что-то.На десктопе и обычном OpenGL все работает нормально, согласно спецификации OpenGL ES 1.1 функция glEnableClientState вроде не была подвержена никаким «кастрациям».Ничего не понимаю....

P.S. Андроидовский планшет. OpenGL ES тестирую ,используя CrystaxNDK и библиотеку SDL2.Проект вроде как использует и OpenGL ES 1 и OpenGL ES 2.0

Ответ на: комментарий от Eddy_Em

OpenGL и шейдеры про растеризацию а не про рейтрейсинг. Привет.

ranka-lee
()
Ответ на: комментарий от Eddy_Em

Ты вместо 1-2 страниц кода напишешь 20, да еще и убьешь кучу времени!!!

Это скорее всего только по началу, потом будет база, от которой отталкиваться.

Между прочим шейдер для стандартного модельно-видового и проекционного преобразования из ffp вот:

#version 430 core


uniform mat4 CurrentMdMatrix; 
uniform mat4 CurrentPrMatrix; 

vec4 nvPosition;

layout (location = 0) in vec4 vPosition;

void main()
{
  nvPosition=vec4(vPosition);
  nvPosition=CurrentMdMatrix*nvPosition;
  nvPosition=CurrentPrMatrix*nvPosition;
  gl_Position=nvPosition;
} 

Забивать CurrentMdMatrix и CurrentPrMatrix в этот шейдер можно с помощью glGetUniformLocation и gluniformMatrix.

На что придется потратить время, это переписать функции glOrtho, glFrustum, glRotate, glTranslate, gluPerspective, а потом, уже можно написать мощную gluLookAt. именно это не так уж долго, тем более что исходники glu не трудно найти. Да, на этом месте ты только-только вернешь старый функционал установки камеры.Но остальное делается наверняка похоже.

Зато имея в распоряжении программирование конвеера рендеринга (чем шейдеры и являются), можно написать специальный шейдер чисто для умножения матриц, например чтобы полностью снять матричные вычисления с CPU и отдать GPU.Целесообразность зависит, конечно, от ситуации. Вызываться такое умножение будет с помощью команды отрисовки фиктивного массива вершин (поставить там какую-нить всего одну вершину с прозрачным альфа каналом).

Nerevarino
() автор топика
Ответ на: комментарий от Nerevarino

Да нахрен мне маяться идиотизмом, если в GLU/GLUT уже все есть? Я просто использую эти библиотеки и не парюсь!

Это пованивает поцтеризмом: поцтеролизы тоже говорят, мол, чего тебе стоит все свои init-скрипты под ненужноD переписать да и отказаться от того, что не работает?

чтобы полностью снять матричные вычисления с CPU и отдать GPU

А они и так в опенгле на GPU пашут. А при желании можно куду подключить и напрямую буфер вершин править.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

А они и так опенгле на GPU пашут

Это понятно.Но вот ,например,есть вычисления кватернионов для описания вращения камеры.Это ведь в целом тоже к графике относится.Вроде же сами кватернионы перемножаются, складываются и генерируют матрицу на стороне CPU, а уже матрица умножается на координаты на GPU. А с шейдером можно ВСЕ эти вычисления на GPU отправить.Мысли вслух

P.S Да делай ты че хочешь.

Nerevarino
() автор топика
Ответ на: комментарий от Eddy_Em

А CUDA же от Nvidia, не?На AMD картах пахать-то будет?Нужно кроссплатформенное(точнее даже «кроссжелезное») решение.

Nerevarino
() автор топика
Ответ на: комментарий от Nerevarino

На AMD картах пахать-то будет?

Наплевать, я эту дрянь не использую.

Нужно кроссплатформенное(точнее даже «кроссжелезное») решение.

Мне не нужно.

Eddy_Em ☆☆☆☆☆
()

Лол. Я правильно понимаю, что эдик написал ffp-like растеризацию, а думает что сделал рейтрейсинг?

Мне, просто, для полной клинической картины (и подписи).

Kuzy ★★★
()
Ответ на: комментарий от Eddy_Em

Там же нет рейтресинга а просто вертексное освещение через нормаль и вектор до источника света?

Tark ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.