Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Импорт функций OpenGl 3.3 с помощью GLEW в Fortran

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

levGreen

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подробнее... [/more]

Всего записей: 8 | Зарегистр. 26-07-2024 | Отправлено: 08:44 26-07-2024
useretail



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
levGreen
https://docs.gl/gl3/glGenBuffers

Цитата:
void glGenBuffers(    GLsizei    n,
GLuint *    buffers);

ф-я glGenBuffers принимает указатель на массив

Всего записей: 4985 | Зарегистр. 14-09-2007 | Отправлено: 12:05 26-07-2024
levGreen

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
useretail, с точки зрения Фортрана все верно. По-моему, согласно стандарту 2003 работа с указатели осуществляется именно так.  Ошибка lnk 2019 не уходит  

Всего записей: 8 | Зарегистр. 26-07-2024 | Отправлено: 13:10 26-07-2024
useretail



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
levGreen
как вы инициализируете ваш буфер?

Всего записей: 4985 | Зарегистр. 14-09-2007 | Отправлено: 14:47 26-07-2024
levGreen

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
levGreen  

Код:
 
integer(GLuint) VBO
....
glGenBuffer(1, VBO)
 

Все согласно статье на habr про совместимость с СИ и Фортран, и собственно переводу уроков по OpenGl все там же.
Я пытался объявлять VBO как указатель си - Type(c_PTR) -, но это ни к чему не привело

Всего записей: 8 | Зарегистр. 26-07-2024 | Отправлено: 15:09 26-07-2024
useretail



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
levGreen

Цитата:
integer(GLuint) VBO

так не годится
 

Код:
GLuint * buffers = new GLuint[NUMBER_OF_BUFFERS];
glGenBuffers(NUMBER_OF_BUFFERS, buffers);

как-то так

Всего записей: 4985 | Зарегистр. 14-09-2007 | Отправлено: 15:59 26-07-2024
levGreen

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
    Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
levGreen
 
Цитата:
integer(GLuint) VBO
 
так не годится

 
Я понимаю, что так не годится, но, к сожалению не пройдет.  
 
Добавлено:

Цитата:
как-то так

Я попробовал, к сожалению, как я и думал, ваша идея не подошла. Я уже говорил, что пытался описать переменную buffer как указатель си - тогда отпала бы нужна в его размещении, но все равно функцию он не находит - lnk2019.  

Всего записей: 8 | Зарегистр. 26-07-2024 | Отправлено: 17:21 26-07-2024 | Исправлено: levGreen, 17:45 26-07-2024
useretail



BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
levGreen

Цитата:
Я попробовал

что именно? нужно передавать указатель на массив

Цитата:
функцию он не находит - lnk2019

думаю находит, просто тип не совпадает с определением функции
если нет, то проверяйте пути: https://learn.microsoft.com/ru-ru/cpp/error-messages/tool-errors/linker-tools-error-lnk2019?view=msvc-170

Всего записей: 4985 | Зарегистр. 14-09-2007 | Отправлено: 00:20 28-07-2024 | Исправлено: useretail, 00:21 28-07-2024
ne_viens

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
функцию он не находит - lnk2019

И не найдёт, так как в либе нет glGenBuffer(), только glGenBuffers()

Всего записей: 1567 | Зарегистр. 01-11-2004 | Отправлено: 09:31 28-07-2024
levGreen

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
и не найдёт, так как в либе нет glGenBuffer(), только glGenBuffers()

 
спасибо за замечание, исправил, но все равно та же ошибка.  
 

Всего записей: 8 | Зарегистр. 26-07-2024 | Отправлено: 11:37 30-07-2024
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
levGreen

Цитата:
как вы инициализируете ваш буфер?
присоединяюсь к вопросу,
т.е. дай кусок кода _до_ кола своей функи
 
и для начала попробуй вот так:

Код:

subroutine glGenBuffer(n, buffers) bind(c, NAME = "glGenBuffer")
!DEC$ ATTRIBUTES DLLIMPORT :: glGenBuffers
import :: GLsizei,GLuint, c_ptr
    integer(GLsizei), intent(in) :: n
    integer(GLuint), intent(out) :: buffers(100000000) ! или любой другой дохренелион
endsubroutine

Всего записей: 24740 | Зарегистр. 06-12-2002 | Отправлено: 02:48 03-08-2024 | Исправлено: akaGM, 02:52 03-08-2024
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
походу всё дело вообще в именовании...
дефолтом фортран генерит для фунок stdcall, а значит надо жёстко прописать везде cdecl, начиная с
NAME = "_glGenBuffers"

Всего записей: 24740 | Зарегистр. 06-12-2002 | Отправлено: 14:44 03-08-2024
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
и в строке
!DEC$ ATTRIBUTES DLLIMPORT :: glGenBuffers
надо добавить
!DEC$ ATTRIBUTES С, DLLEXPORT :: glGenBuffers
 
хотя, если честно, я эту GL библиотеку совсем не знаю, может быть для ускорения там всё как раз на стдкалах :) и написано, надо смотреть мануал или какой-нить GL.h

Всего записей: 24740 | Зарегистр. 06-12-2002 | Отправлено: 17:27 03-08-2024 | Исправлено: akaGM, 17:27 03-08-2024
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
levGreen
 
можешь каким-нибудь просмотрщиком (Far, TotalCommander) посмотреть свой самый основной *.obj, который генерится фортраном из основной f90-проги (ну где ты вызываешь эту glGenBuffers()), как она там выглядит? в смысле имени...

Всего записей: 24740 | Зарегистр. 06-12-2002 | Отправлено: 23:13 03-08-2024 | Исправлено: akaGM, 23:31 03-08-2024
levGreen

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Подробнее...

Всего записей: 8 | Зарегистр. 26-07-2024 | Отправлено: 17:21 04-08-2024
MBK2

Gold Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
levGreen

Цитата:
ни разу не пробовал смотреть файлы obj

Есть инструмент покруче hex вьювера.

Всего записей: 5005 | Зарегистр. 18-09-2018 | Отправлено: 20:10 04-08-2024
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
levGreen
 
так теперь, с этим ГЛАДом, проблема-то в чём? :)

Всего записей: 24740 | Зарегистр. 06-12-2002 | Отправлено: 22:01 04-08-2024
levGreen

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
Хороший вопрос, я не знаю.Код компилируется и выполняется, но при попытке узнать скомпилировался Шейдер или нет ничего не происходит. Попытка вытащить код ошибки ни к чему не приводит - строка остается почему-то пустая.  

Всего записей: 8 | Зарегистр. 26-07-2024 | Отправлено: 11:34 10-08-2024
akaGM

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
levGreen

Цитата:
при попытке узнать скомпилировался Шейдер или нет ничего не происходит
в смысле? у тебя компилятор немой что ли?

Всего записей: 24740 | Зарегистр. 06-12-2002 | Отправлено: 02:58 12-08-2024
levGreen

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
akaGM
 

Цитата:
в смысле? у тебя компилятор немой что ли?

 Шейдеры же компилируются во время выполнения
 

Всего записей: 8 | Зарегистр. 26-07-2024 | Отправлено: 08:00 12-08-2024
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Импорт функций OpenGl 3.3 с помощью GLEW в Fortran


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru