forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   C++ (http://forum.boolean.name/forumdisplay.php?f=22)
-   -   Code::Blocks + modern OpenGL (http://forum.boolean.name/showthread.php?t=18455)

Nikich 12.08.2013 20:26

Code::Blocks + modern OpenGL
 
Таки намучал себе новый OpenGL к любимому C::B и хочу поделить своим опытом, вдруг у кого будут проблемы.
Мы будем работать с:

Code::Blocks
GLEW
GLFW

Для начала, если нету, качаем C::B с официального сайта. Запускаем, создаем пустой проект(File->New->Project->Empty project). C::B не закрываем, пусть висит.
Теперь качаем GLFW. Заходим на официальный сайт(см. выше), Download->Binaries for 32(64)-bit Windows Download. Качаем, распаковываем в любую папку.
Теперь качаем GLEW. Заходим на главную и качаем не Bin а Source. Авторы не раскрыли, что ещё кроме их либ нужно подключить, чтобы GLEW заработал, поэтому нам придется подрубить его вручную. Тоже распаковываем это дело в любую папку.
Разворачиваем наш C::B. Можете настроить его под проект, либо же установить глобальные настройки, дело ваше. Я расскажу как настроить под наш текущий проект. Слева, во вкладке Workspace, будет значок C::B с именем вашего проекта. Правая кнопка мыши->Build options->Linker settings. В other linker options пишем следующую строку:
Код:

-lglfw3 -lopengl32 -lgdi32 -luser32 -lkernel32
Теперь идем в Search directories. Чтобы добавить новый путь, нажмите на кнопку Add.
Вкладка Compiler: здесь указываем пути к нашим include папкам библиотек. У меня получилось следующие:
D:\OGL\GLFW\include
D:\OGL\GLEW\inlcude
Вкладка Linker: здесь указываем пути к lib папке GLFW. У меня получилось следующие:
D:\OGL\GLFW\lib-mingw
Та-дам, мы настроили C::B на работу. Теперь создадим файл "main.cpp" в папке с нашим проектом и заполним его следующим кодом:

PHP код:

#define GLEW_STATIC
#include <GL/glew.h>
#include <GL/glew.c>
#include <GLFW/glfw3.h>
#include <iostream>
int main(void)
{

    
GLFWwindowwindow;
    if (!
glfwInit())
        return -
1;
    
window glfwCreateWindow(640480"Hello World"NULLNULL);
    if (!
window)
    {
        
glfwTerminate();
        return -
1;
    }
    
glfwMakeContextCurrent(window);
    
GLenum err glewInit();
    if (
GLEW_OK != err)
        
std::cout<<"Error: "<<glewGetErrorString(err)<<std::endl;
    if (
GLEW_VERSION_4_3)
        
std::cout<<"WIN!"<<std::endl;
    
GLuint VertexArrayID;
    
glGenVertexArrays(1, &VertexArrayID);
    
glBindVertexArray(VertexArrayID);
    static const 
GLfloat g_vertex_buffer_data[] = {
   -
1.0f, -1.0f0.0f,
   
1.0f, -1.0f0.0f,
   
0.0f,  1.0f0.0f,
    };
    
GLuint vertexbuffer;
    
glGenBuffers(1, &vertexbuffer);
    
glBindBuffer(GL_ARRAY_BUFFERvertexbuffer);
    
glBufferData(GL_ARRAY_BUFFERsizeof(g_vertex_buffer_data), g_vertex_buffer_dataGL_STATIC_DRAW);
    while (!
glfwWindowShouldClose(window))
    {
        
glEnableVertexAttribArray(0);
        
glBindBuffer(GL_ARRAY_BUFFERvertexbuffer);
        
glVertexAttribPointer(03GL_FLOATGL_FALSE0, (void*)0);
        
glDrawArrays(GL_TRIANGLES03);
        
glDisableVertexAttribArray(0);
        
glfwSwapBuffers(window);
        
glfwPollEvents();
    }
    
glfwTerminate();
    return 
0;



Нажимаем F9, видим белый треугольник и "WIN!" в консоли, радуемся тому, что у нас есть поддержка OpenGL 4.3 в отличном IDE - Code::Blocks.
Спасибо за внимание, надеюсь, кому-нибудь пригодится:)

Gector 16.08.2013 23:57

Ответ: Code::Blocks + modern OpenGL
 
Выдает:
Цитата:

C:\Dev\CPP\GLEW\main.cpp|3|GL/glew.c: No such file or directory|
Эммм... Так куда его пихать?)

Nikich 17.08.2013 01:44

Ответ: Code::Blocks + modern OpenGL
 
Проверь пути во вкладке Compiler, возможно не то указал.

Gector 17.08.2013 01:58

Ответ: Code::Blocks + modern OpenGL
 
Цитата:

Сообщение от Nikich (Сообщение 265424)
Проверь пути во вкладке Compiler, возможно не то указал.

Все точно по инструкции. Где .c-файл должен быть?

Nikich 17.08.2013 02:07

Ответ: Code::Blocks + modern OpenGL
 
Там же, где и glew.h .

Gector 17.08.2013 02:12

Ответ: Code::Blocks + modern OpenGL
 
Цитата:

Сообщение от Nikich (Сообщение 265426)
Там же, где и glew.h .

То есть его надо переместить в "c:\glew\include\"?

Nikich 17.08.2013 02:26

Ответ: Code::Blocks + modern OpenGL
 
В папку /include/GL.

Gector 23.10.2013 22:27

Ответ: Code::Blocks + modern OpenGL
 
Глупый вопрос но все же задам его. Как добавить поддержку предыдущих версий GL?)

Nikich 24.10.2013 00:44

Ответ: Code::Blocks + modern OpenGL
 
Использовать старые версии OGL. Нельзя совместить функционал и нового и старого в одном проекте, как я понимаю, ведь там совсем разные подходы.

Nikich 24.10.2013 19:16

Ответ: Code::Blocks + modern OpenGL
 
Какой самый правильным способ объединить несколько библиотек в одну DLL? Запихнуть все исходники в один и из него уже запилить DLL?

HolyDel 24.10.2013 20:59

Ответ: Code::Blocks + modern OpenGL
 
Цитата:

Какой самый правильным способ объединить несколько библиотек в одну DLL? Запихнуть все исходники в один и из него уже запилить DLL?
я делал так.
как показала практика - это самый удобный способ. Собирать статические либы в виде компонентов, или тем более длл-лок оказалось очень муторно. Да, увеличивается время компиляции и особенно время линковки, но зато настройки проекта можно менять очень быстро. Не собирая тыщи либ на каждый чих.

Nikich 27.10.2013 01:21

Ответ: Code::Blocks + modern OpenGL
 
Ещё один вопрос касательно создания библиотеки. Как сделать статичную либу, которая использует для своей работы другие статичные либы?
Для поддержки OGL, приходится использовать как минимум следующие флаги:"-lopengl32 -lgdi32 -luser32 -lkernel32". Поэтому, если либа работает с OGL, она должна включить в себя данные библиотеки, что делать она отказывается:( Как быть?

pozitiffcat 28.10.2013 09:13

Ответ: Code::Blocks + modern OpenGL
 
Цитата:

Сообщение от Nikich (Сообщение 269373)
Ещё один вопрос касательно создания библиотеки. Как сделать статичную либу, которая использует для своей работы другие статичные либы?
Для поддержки OGL, приходится использовать как минимум следующие флаги:"-lopengl32 -lgdi32 -luser32 -lkernel32". Поэтому, если либа работает с OGL, она должна включить в себя данные библиотеки, что делать она отказывается:( Как быть?

статически нельзя слинковать в библиотеку динамические библиотеки, какими является opengl32, glu, glut и т.д. либо смирись, либо компиль динамическую библиотеку. Ты должен понимать, что статическая библиотека, это архив с отдельно откомпилированными исходными файлами c, cpp (единицами трансляции), когда ты линкуешь ее в проект происходит тоже самое если бы использовал исходники, только эти уже заранее откомпилированы. Вот динамическая библиотека наоборот, компилируется и линкуется с другими библиотеками так же как и exe файл. Поэтому при подключении динамической библиотеки не требуется еще указывать кучу зависимых библиотек, но стоит учесть что dll компоненты которые она использует в системе необходимы быть

Nikich 28.10.2013 20:27

Ответ: Code::Blocks + modern OpenGL
 
Милый Linux умеет объединять, разбивая статик либы на объекты, а потом компонуя обратно в либу. Также вычитал, что и студия умеет. GCC же, видимо, соснул:(

Samodelkin 28.10.2013 23:40

Ответ: Code::Blocks + modern OpenGL
 
Цитата:

Сообщение от Nikich (Сообщение 269417)
Милый Linux умеет объединять, разбивая статик либы на объекты, а потом компонуя обратно в либу. Также вычитал, что и студия умеет. GCC же, видимо, соснул:(

Что то ты здесь перепутал. В Linux как раз gcc по умолчанию и установлен. Причем он там намного лучше чем всякие его mingw реализации в Windows. К тому же компонует компоновщик, а не компилятор, просто компилятор через себя его вызывает. В линух все библиотеки обычно дублируются в двух вариантах - статическом и динамическом, поэтому можно задав соответствующий ключ прилинковать как больше нравится. Линковать opengl статически не лучший вариант - он же обновляется (сохраняя совместимость), к тому же будет куча продублированного кода (в том числе загруженного в память).

Nikich 29.10.2013 00:59

Ответ: Code::Blocks + modern OpenGL
 
Да, моя ошибка, имел ввиду mingw.
Как, кстати, вообще Linux для разработчика? Есть ли существенные плюсы сравнивая с Windows?

jimon 29.10.2013 01:34

Ответ: Code::Blocks + modern OpenGL
 
ну POSIX и UNIX окружение решают как бы, но смотря где, мне например в последнее время нравится FreeBSD, особенно из-за этого https://wiki.freebsd.org/GPLinBase

но linux-based-os понятие растяжимое, есть как бы и source-based и packed-based os, никогда не задумывались что в некоторых редистрах юниксо-подобных ос есть папка инклуд где лежат C (и C++) хидеры ? =) source-based довольно интересные, например freebsd как раз source-based

но линупсам не хватает нормальных IDE, я знаю только qt creator для C\C++, плюс gcc давно пора на покой, clang решает

Samodelkin 29.10.2013 01:57

Ответ: Code::Blocks + modern OpenGL
 
Цитата:

но линупсам не хватает нормальных IDE, я знаю только qt creator для C\C++, плюс gcc давно пора на покой, clang решает
Eclipse CDT например.
Для небольших проектов достаточно хорошего текстового редактора с подсветкой синтаксиса, gcc и gdb.
clang имхо слишком большой и сложный для маленьких и простых проектов, так что gcc ненадо на покой.

Nikich 29.10.2013 02:03

Ответ: Code::Blocks + modern OpenGL
 
А, собственно, сам Code::Blocks чем плох?

den 29.10.2013 02:03

Ответ: Code::Blocks + modern OpenGL
 
Хорошо настроенный vim может заменить ide.
Только настраивать придется по большей части самому, юникс вей же!

jimon 29.10.2013 03:05

Ответ: Code::Blocks + modern OpenGL
 
Samodelkin
Eclipse научился отслеживать изменения в файлах ? =) я уж лучше в nano попишу чем в нем - надежнее

Цитата:

gcc ненадо на покой
а ты глянь в исходники stl там (libstdc++), а потом глянь в исходники libc++ из llvm - поймешь что этому архаизму давннооо пора на покой, только его недавно решили оживить инъекцией c++11

кстати не знаю чего он там большой, llvm по размеру почти как gcc, а clang это почти drop-in replacement

Den
и vifm тогда уж, да и присыпать awesome - будет совсем хорошо
а если поднять wayland + enlightenment + freebsd то совсем от архаизмов и столмана откажемся, красота же =)

Nikich
попиши в qt creator хотя бы, чтобы было бы с чем сравнивать =) он недавно стал настолько мощный что я полностью отказался от msvs в пользу его

Samodelkin 29.10.2013 04:19

Ответ: Code::Blocks + modern OpenGL
 
Цитата:

а ты глянь в исходники stl там (libstdc++), а потом глянь в исходники libc++ из llvm
Так ими нужно пользоваться, а не разглядывать их.
Здесь кстати кому как, а я не очень люблю в кодах нагромождения из шаблонов - они читабельность портят. Чрезмерное обобщение никчему.
Цитата:

кстати не знаю чего он там большой, llvm по размеру почти как gcc, а clang это почти drop-in replacement
Я сам не так хорошо знаком с clang+llvm. Но я к тому что на gcc можно написать hello world, а для работы на clang+llvm нужно нехилым опытом программирования на с/с++ обладать и как минимум сначала dragonbook прочитать, чтобы быть в теме всего происходящего.

jimon 29.10.2013 05:00

Ответ: Code::Blocks + modern OpenGL
 
Цитата:

Сообщение от Samodelkin (Сообщение 269432)
Так ими нужно пользоваться, а не разглядывать их.
Здесь кстати кому как, а я не очень люблю в кодах нагромождения из шаблонов - они читабельность портят. Чрезмерное обобщение никчему.

тогда ты просто программист, ибо инженер должен понимать чего стоит его инструмент, и какие вещи тру, а какие не тру

Цитата:

Сообщение от Samodelkin (Сообщение 269432)
Я сам не так хорошо знаком с clang+llvm. Но я к тому что на gcc можно написать hello world, а для работы на clang+llvm нужно нехилым опытом программирования на с/с++ обладать и как минимум сначала dragonbook прочитать, чтобы быть в теме всего происходящего.

wut ? clang для юзера это просто C\C++ компилятор, абсолютно такой же как и gcc, и используется точно так же, у них даже ключи компиляции похожие, потому новичку будет в них разобраться одинаково просто, но под капотом у них сильно разное устройство, скажем gcc это паровоз, а clang это ракета :crazy: студийный компилятор кстати тоже жесть, я как узнал что у них до нынешних времен не было AST, то выпал в осадок, пора ему на упокой тоже видимо

pozitiffcat 29.10.2013 09:19

Ответ: Code::Blocks + modern OpenGL
 
Цитата:

Сообщение от Nikich (Сообщение 269426)
Да, моя ошибка, имел ввиду mingw.
Как, кстати, вообще Linux для разработчика? Есть ли существенные плюсы сравнивая с Windows?

Адекватное окружение, адекватный компилятор, можно поставить без танцев с бубном clang если так хочется. Никаких тормозов. Комп не включается по 5 минут, и может быстро выключится, в отличие от винды. При включении или выключений нет обновлений по полтора часа.
Сам сижу под OS X.

Samodelkin 29.10.2013 09:34

Ответ: Code::Blocks + modern OpenGL
 
Цитата:

тогда ты просто программист, ибо инженер должен понимать чего стоит его инструмент, и какие вещи тру, а какие не тру
Именно поэтому я осознанно отказываюсь от шаблонов во всех ситуациях где можно обойтись и без них, а не слепо следую рекомендациям "хорошего тона программирования". Зачем выбирать самые крутые инструменты, если есть достаточные для выполнения конкретной работы?

jimon 29.10.2013 13:29

Ответ: Code::Blocks + modern OpenGL
 
Цитата:

Сообщение от Samodelkin (Сообщение 269435)
Именно поэтому я осознанно отказываюсь от шаблонов во всех ситуациях где можно обойтись и без них, а не слепо следую рекомендациям "хорошего тона программирования". Зачем выбирать самые крутые инструменты, если есть достаточные для выполнения конкретной работы?

Мы сейчас например решили пописать движок вообще чисто на C11 :crazy: Ибо ООП в геймдеве не нужно, и C++ похоже тоже не нужен :crazy: Но каждый инструмент имеет свою сферу применения, например прикладной софт "запроцесить этот файлик по быстренькому пыщьпыщь" вполне себе пишут на всяких питонах и джавах, потому чтобы C++ с ними мог соревноваться по скорости написания софта нужно использовать стандартную библиотеку, благо C++11\14 обладают куда более широкими возможностями в ней чем C++03

Samodelkin 29.10.2013 15:11

Ответ: Code::Blocks + modern OpenGL
 
Цитата:

Но каждый инструмент имеет свою сферу применения
Ну так о том и речь.
STL например для каких нибудь RAD подойдет наверное. А для основательных проектов можно выделить время и на разработку своей конвенции кодирования.
Цитата:

Мы сейчас например решили пописать движок вообще чисто на C11
Это интересно.
Цитата:

Ибо ООП в геймдеве не нужно, и C++ похоже тоже не нужен
А вот это уже сомнительно... Хотя Quake3 был на Си написан, и весьма хорошо. Сейчас есть практика движки на Си писать? Разве будет большой выйгрышь по скорости? Или из каких то других соображений так делают?

jimon 29.10.2013 21:20

Ответ: Code::Blocks + modern OpenGL
 
Samodelkin
С компилируется в много раз быстрее C++ потому что он гарантировано компилируется за один проход, в C11 добавили потоки, потому от POSIX мы зависим еще меньше

в C++ не удобно что на каждом проекте изобретают вселенную (набор паттернов, фреймворков и тд), и чтобы программиста обучить им нужно довольно много времени, в C набор паттернов довольно ограниченный, и вход в проект дается куда проще


Часовой пояс GMT +4, время: 05:27.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot