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 то в консоле пишет ошибка сегментации

стесняюсь спросить, а это нормально?

int pargc;
char **argv;
glutInit(&pargc,argv);

anonymous ()

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

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

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

я пишу либу поэтому у меня нет main и как теперь сделать я незнаю

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

Вы можете инициализировать входные данные для glutInit() самостоятельно.

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

Например, так:

char *argv[] = {(char []){"mylib"}, NULL};
int argc = sizeof(argv) / sizeof(argv[0]) - 1;
Sorcerer ★★★★★ ()

GLUT не рекомендуется использовать для игр.

postman_ ★☆ ()
Ответ на: комментарий от 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 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.