LINUX.ORG.RU

как сделать библиотеку с glut


1

3

Всем привет пишу свой движок для начала решил попробовать для начало glut

#include <GL/glut.h>
#include "myengine.h"
extern "C"
{
    void Display()
{
    glClear(0x20A9FFFF);

}
   int Init(int width,int height,char *name)
   {
        int pargc;
        char **argv;
        glutInit(&pargc,argv);
        glutInitWindowSize(width,height);
        glutInitWindowPosition(100,200);
        glutCreateWindow(name);
        glutDisplayFunc(Display);
        return 1;
   }
    void Run()
    {
        glutMainLoop();
    }

}
В файле myengine.h находятся прототипы функций Init и Run.Коpоче скомпелиpовал эту либу и если я подключаю к свой программе и вызываю функции Init и Run то в консоле пишет ошибка сегментации

в примере туда передаются аргументы из main-а, у тебя неинициализированные переменные

void main(int argcp, char **argv){  
...
/* Инициализация первоначального состояния GLUT */  
glutInit(&argcp, argv);   
...
}; 

anonymous
()
Ответ на: комментарий от sergei9

а если так int Init(int argp,char **argv,int width,int height,char *name)

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

Рановато сразу начинать с glut и движков... Потренируйтесь сначала на hello, world, почитайте учебники по C и C++. Тут был где-то тред о том, какие есть хорошие книжки, в них подробно и доступно описано, что такое инициализация и объявление переменной, что такое прототип фукнции и другие базовые вещи.

Инициализировать переменную = присвоить ей начальное значение. Каким оно будет - решать разработчику, т. е. вам. Вы пишете библиотеку, ее будут использовать приложения, часть параметров, возможно, знают они - их надо сделать параметрами функции. Другую часть параметров надо установить в какие-то разумные значения по умолчанию, например argcp = 0, argv = адресу переменной типа char * со значением NULL.

Kiborg
()
Ответ на: комментарий от sergei9

Рекомендую внять советам выше читать документацию на английском.
Ничего плохого в документации на русском языке нет, но, как ты сам заметил выше, ее существенно меньше, чем на английском.

Когда-то в похожей теме на лоре сказали, что английский учится его неизбеганием. Поэтому самое правильное, что ты можешь сделать в данной ситуации - это пойти на http://lazyfoo.net/SDL_tutorials/ и начать потихоньку разбирать представленные там (легкие) туториалы.
Сначала будет сложновато и придется часто лазить в словари и гуглотранслейт, но потом ты заметишь, что все реже отвлекаешься на незнакомые слова и понимаешь предложения целиком, без разбора их по словам. Уверяю, это окупится сполна и очень поможет в профессиональной деятельности, не говоря уж о персональной гордости за то, что сам смог осилить =)

kravich
()
Последнее исправление: kravich (всего исправлений: 2)
Ответ на: комментарий от i_gnatenko_brain

его плюс только в том, что валом сопутствующих либ а-ля картинки грузить и музыку играть. последний раз я его под mingw не смог завести без патча. думаю вот наваять свой предсказуемый велосипед.

x0r
()

Перед написанием своего движка, изучи существующие.

Например, OpenSceneGraph, по нему есть неплохие книжки.

unfo
()
Последнее исправление: unfo (всего исправлений: 1)
Ответ на: комментарий от x0r

у нас в репах mingw-SDL работает норм =)

но вот mingw-SDL2 мне лень было запихивать в репы ибо не знаю вообще как работает mingw.

+ SDL2 предоставляет нормальные global hotkeys (не знаю как, но в SDL такого не было )

i_gnatenko_brain
()
Последнее исправление: i_gnatenko_brain (всего исправлений: 1)
Ответ на: комментарий от sergei9

прочитал первый тутореал без переводчика вроде понятно,оказуется все не так сложно как кажется

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

Плюсую, еще можно посмотреть на Sexy Framework от Pop Cap.
Он правда только под винду, но для изучения очень даже хорош.

kravich
()

решил попробовать для начало glut

выкинь это гавно мамонта

пиши на чистом апи, там создание окна в иксах и обработка ввода строк 50-100 максимум... заодно поймешь как должна идти логика программы...

почему советую на чистом апи? Потому что дальше хелло ворлда и кубика в ОГЛ это не уйдет... слишком сложна матчасть.

jo_b1ack
()
Ответ на: комментарий от i_gnatenko_brain

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

jo_b1ack
()
Ответ на: комментарий от i_gnatenko_brain

я собирал SDL2 под mingw в оффтопике, если что :)

x0r
()

проблему я уже решил так init(int argp,char ** argv,int width,int height,char *name)

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

Посмотрел исходники. Ваш вариант работать точно не будет, т.к. glutInit() разыменовывает pargc без проверок на NULL.

Мой вариант же на самом деле избыточен: glutInit() не пытается модифицировать содержимое массивов argv[i], и все деобходимые данные копирует в свои внутренние структуры. Так что достаточно проинициализировать argv[0] указателем на константный массив.

Sorcerer
()
Последнее исправление: Sorcerer (всего исправлений: 1)
Ответ на: комментарий от Sorcerer

Ваш вариант работать точно не будет, т.к. glutInit() разыменовывает pargc без проверок на NULL

Хм, странно, вроде раньше работало. Значит, у разработчиков glut руки растут откуда-то не оттуда :)

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