Forth
http://fforum.winglion.ru/

IUP и OPENGL
http://fforum.winglion.ru/viewtopic.php?f=2&t=3271
Страница 1 из 2

Автор:  Victor__v [ Ср июн 24, 2020 03:18 ]
Заголовок сообщения:  IUP и OPENGL

Пытался вкурить пример по IUP с GL
перевел на форт, но вместо вожделенного квадрата там только тьма
https://github.com/LuaDist/iup-examples ... glcanvas.c

Версия на форте (Nova)

Код:
2 Cdecl: IupOpen Iup
2 Cdecl: IupButton Iup
0 Cdecl: IupClose Iup
0 Cdecl: IupFill IUP
1 Cdecl: IupLabel Iup
1 Cdecl: IupDialog Iup
1 Cdecl: IupHide Iup
N-Cdecl: IupVbox Iup
N-Cdecl: IupHbox Iup
1 Cdecl: IupShow Iup
3 Cdecl: IupSetAttribute Iup
4 Cdecl: IupGetIntInt IUP
2 Cdecl: IupGetAttribute IUP
0 Cdecl: IupMainLoop Iup
3 Cdecl: IupSetCallback Iup

0 Cdecl: IupGLCanvasOpen    IupGL
1 Cdecl: IupGLCanvas      IupGL
1 Cdecl: IupGLMakeCurrent   IupGL
1 Cdecl: IupGLIsCurrent      IupGL
1 Cdecl: IupGLSwapBuffers   IupGL

WINAPI: glDrawPixels      OPENGL32
WINAPI: glViewport      OPENGL32
WINAPI: glMatrixMode      OPENGL32
WINAPI: glLoadIdentity      OPENGL32
WINAPI: glClearColor      OPENGL32
WINAPI: glClear       OPENGL32
WINAPI: glColor3i      OPENGL32
WINAPI: glVertex3i      OPENGL32
WINAPI: glVertex2i      OPENGL32
WINAPI: glVertex2f      OPENGL32
WINAPI: glBegin         OPENGL32
WINAPI: glEnd         OPENGL32
WINAPI: glOrtho         OPENGL32

\ создать константную строку для удобства
: W-CONST ALT: HERE >R >IN @ >R PARSE-NAME ALT: S, 0 ALT: C,
R> >IN ! R> CONSTANT ;

W-CONST SIZE
W-CONST TITLE
W-CONST ACTION
W-CONST Yes
W-CONST SCROLLBAR
W-CONST DOUBLE
W-CONST BUFFER

-2 CONSTANT IUP_DEFAULT \

~ER/LOCALS/R-LOCAL.F CONTEXT @ ALT: TEMP-OUT

REQUIRE FLOAT ~ER/FLOAT/FLOAT.F ALSO FLOAT ' PREVIOUS >R

1 CALLBACK: BLA
@ { CANVAS }

SP@ >R
CANVAS IupGLMakeCurrent      

123 200 0 0 glViewport
1 1 1 1  glClearColor
0x4000 0x100 OR glClear

100 0 30 glColor3i

0x0007 glBegin \ квадрат
\ через целые тоже пробовал, все равно не работает
0.9    0.9    glVertex2f
0.9     -0.9    glVertex2f
-0.9     -0.9   glVertex2f
-0.9     0.9    glVertex2f
glEnd

CANVAS IupGLSwapBuffers
R> SP!
IUP_DEFAULT
;

: TEST
{ \ CANVA DLG HB  }
0 0 IupOpen THROW
IupGLCanvasOpen  DROP
0 IupGLCanvas TO CANVA

S" 123x200" DROP S" RASTERSIZE" DROP CANVA IupSetAttribute DROP   
DOUBLE BUFFER CANVA IupSetAttribute DROP
['] BLA ACTION CANVA IupSetCallback DROP
0 IupFill CANVA IupFill 4 IupHbox TO HB
HB IupDialog TO DLG
S" GL-TEST" DROP TITLE DLG  IupSetAttribute DROP
S" 300x300" DROP SIZE DLG IupSetAttribute DROP

DLG IupShow
IupMainLoop THROW
IupClose THROW

;
TEST


Вот почему не работает?

Автор:  zma [ Ср июн 24, 2020 11:59 ]
Заголовок сообщения:  Re: IUP и OPENGL

Может, ['] BLA передавать при создании glcanvas? Он вообще вызывается?

Автор:  Victor__v [ Ср июн 24, 2020 14:04 ]
Заголовок сообщения:  Re: IUP и OPENGL

Вызывается он, отдельно проверял этот каллбек
Все как и в примере на Сях

Автор:  Hishnik [ Ср июн 24, 2020 18:26 ]
Заголовок сообщения:  Re: IUP и OPENGL

0.9 0.9 glVertex2f

А если тут через вектор? У OpenGL свои отношения со стеком, лучше передавать указатель на массив. Т.е. glVertex2dv

Автор:  Victor__v [ Ср июн 24, 2020 18:52 ]
Заголовок сообщения:  Re: IUP и OPENGL

Hishnik писал(а):
0.9 0.9 glVertex2f

А если тут через вектор? У OpenGL свои отношения со стеком, лучше передавать указатель на массив. Т.е. glVertex2dv

В смысле?
Непонятно откуда значения брать будет?
Толи с FPU толи со стека возвратов?

Автор:  Victor__v [ Ср июн 24, 2020 21:22 ]
Заголовок сообщения:  Re: IUP и OPENGL

Сейчас с freeglut начал тестировать та же проблема.
В общем, Хищник прав :))
Лучше использовать массивы.
У меня отчего-то glColor3i тупо не работал.
стоило заменить glColor3f и закинуть флоаты на стек данных, как сразу все нарисовалось

Код:
WINAPI: glutInit          FREEGLUT
WINAPI: glutInitDisplayMode      FREEGLUT
WINAPI: glutInitWindowSize      FREEGLUT
WINAPI: glutInitWindowPosition      FREEGLUT
WINAPI: glutCreateWindow      FREEGLUT
WINAPI: glutReshapeFunc         FREEGLUT
WINAPI: glutDisplayFunc         FREEGLUT
WINAPI: glutSwapBuffers         FREEGLUT
WINAPI: glutMainLoop         FREEGLUT

WINAPI: glDrawPixels      OPENGL32
WINAPI: glViewport      OPENGL32
WINAPI: glMatrixMode      OPENGL32
WINAPI: glLoadIdentity      OPENGL32
WINAPI: glClearColor      OPENGL32
WINAPI: glClear       OPENGL32
WINAPI: glColor3i      OPENGL32
WINAPI: glColor3f      OPENGL32
WINAPI: glVertex3i      OPENGL32
WINAPI: glVertex2i      OPENGL32
WINAPI: glVertex2f      OPENGL32
WINAPI: glVertex2fv      OPENGL32
WINAPI: glVertex2iv      OPENGL32
WINAPI: glBegin         OPENGL32
WINAPI: glEnd         OPENGL32
WINAPI: glOrtho         OPENGL32
WINAPI: glLineWidth      OPENGL32

WINAPI: gluOrtho2D      GLU32


~ER/LOCALS/R-LOCAL.F CONTEXT @ ALT: TEMP-OUT

REQUIRE FLOAT ~ER/FLOAT/FLOAT.F ALSO FLOAT ' PREVIOUS >R



\ калбеки в нове настроены на самоочищение от параметров
\ в этом каллбеке 2 параметра, их очищать не надо. это сделает винда
\ т. к. снимает вызвавший
0 CALLBACK: RESHARE

DUP CELL+ @ SWAP @ { h w }
h w 0 0      glViewport
      
0x1701       glMatrixMode
      glLoadIdentity

\ h int>F FD> 0,0 FD>         \ работает и без этого
\ w int>F FD> 0,0 FD>
\       gluOrtho2D

0x1700 glMatrixMode
glLoadIdentity
;

: F, F> , ;

CREATE L1 0,5 F, 0,5 F,
CREATE L2 -0,5 F, 0,5 F,
CREATE L3 -0,2 F, -0,2 F,
CREATE L4 0,5 F, -0,5 F,

0 CALLBACK: DISP
0x4000 0x100 OR glClear  \ 0x4000 GL_COLOR_BUFFER_BIT

255.0 F> 255.0 F> 0.0 F> glColor3f   \ 3i ,сука, не работает!!!
7 glBegin \ квадрат 7  1 линия
L1      glVertex2fv
255.0 F> 0.0 F> 255.0 F> glColor3f
L2       glVertex2fv
0.0 F> 255.0 F> 255.0 F> glColor3f
L3      glVertex2fv
0.0 F> 44.0 F> 12.0 F> glColor3f
L4 glVertex2fv

glEnd

glutSwapBuffers   

;

: TEST
0 HERE glutInit
2 glutInitDisplayMode \ 0x0002 GLUT_DOUBLE - двойная буфферизация
600 800 glutInitWindowSize
S" GL-TEST" DROP glutCreateWindow
['] RESHARE glutReshapeFunc
['] DISP glutDisplayFunc
glutMainLoop
;

TEST

Автор:  Victor__v [ Чт июн 25, 2020 16:55 ]
Заголовок сообщения:  Re: IUP и OPENGL

Следующий вопрос.

Попробовал запустить продвинутый пример отображения треугольника через шейдеры
https://learnopengl.com/Getting-started/Hello-Triangle

Естественно, файл OPENGL32 валяющийся в папке system32 не подходит для такого кода (тупо нет функций)
Где можно взять подходящуюю DLL для GL версии 3.0 и выше?

Автор:  Hishnik [ Чт июн 25, 2020 19:32 ]
Заголовок сообщения:  Re: IUP и OPENGL

Victor__v писал(а):
Естественно, файл OPENGL32 валяющийся в папке system32 не подходит для такого кода (тупо нет функций)
Где можно взять подходящуюю DLL для GL версии 3.0 и выше?

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

Автор:  Victor__v [ Чт июн 25, 2020 20:25 ]
Заголовок сообщения:  Re: IUP и OPENGL

Hishnik писал(а):
Victor__v писал(а):
Естественно, файл OPENGL32 валяющийся в папке system32 не подходит для такого кода (тупо нет функций)
Где можно взять подходящуюю DLL для GL версии 3.0 и выше?

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

Я обновлял драйверы меньше года назад на видеокарту NVIDEA

Мне нужна, надеюсь, только DLL
Может ли случится так, что она просто валяется где-то под другим названием?

Автор:  Hishnik [ Чт июн 25, 2020 20:56 ]
Заголовок сообщения:  Re: IUP и OPENGL

Victor__v писал(а):
Может ли случится так, что она просто валяется где-то под другим названием?

Скорее под тем же названием, правильная (обновленная) версия, но при старте находит старую, которая была в ОС по умолчанию. Это зависит от того, в каком порядке в PATH перечислено. Можно попробовать положить правильный файл прямо в папку проекта.

Кроме того, там еще что-то в glu32.dll

Автор:  Victor__v [ Чт июн 25, 2020 21:57 ]
Заголовок сообщения:  Re: IUP и OPENGL

Сейчас вот нашел
https://www.khronos.org/opengl/wiki/Pla ... on_Windows

Там есть как и исходники, так и 2 DLL

Закинул себе в папку с фортом, по крайней мене не вылетает.
Хотя я не уверен в используемой конвенции вызовов. Наверно придется лезть в исходники.
Однако сами функции с этими, как их там, пометками компилятора
То есть функция glCreateShader называется _glCreateShader@4 например

В общем, пример из урока запустил но он не работает :)

Автор:  KPG [ Чт июн 25, 2020 22:21 ]
Заголовок сообщения:  Re: IUP и OPENGL

Victor__v писал(а):
В общем, пример из урока запустил но он не работает :)

Если ещё пробовать запускать примеры из "древних" OpenGL SDK то они бывает интересно работаю/неработают
в современном графическом окружении операционной системы. :)

Автор:  Victor__v [ Чт июн 25, 2020 23:50 ]
Заголовок сообщения:  Re: IUP и OPENGL

Треугольник нарисовался.
Однако шейдеры не хотят работать.
Ошибка кстати интересная.
glsl 3.00 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.40, 1.00 ES, and 3.00 ES
Что делать?
в качестве обертки использую freeglut

Автор:  Hishnik [ Пт июн 26, 2020 00:10 ]
Заголовок сообщения:  Re: IUP и OPENGL

Victor__v писал(а):
glsl 3.00 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.40, 1.00 ES, and 3.00 ES
Что делать?

А какая видеокарта? Может, и правда not supported?

Автор:  Victor__v [ Пт июн 26, 2020 00:19 ]
Заголовок сообщения:  Re: IUP и OPENGL

Hishnik писал(а):
Victor__v писал(а):
glsl 3.00 is not supported. Supported versions are: 1.10, 1.20, 1.30, 1.40, 1.00 ES, and 3.00 ES
Что делать?

А какая видеокарта? Может, и правда not supported?

intel hd graphics 4000
и
NVidea GeForce 710M

Вообще подозреваю, что виновата библиотека Mesa3D откуда я и взял OPENGL32.DLL
Поскольку не только мне посчастливилось столкнуться с похожей ошибкой

Страница 1 из 2 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/