Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > C++

Ответ
 
Опции темы
Старый 12.08.2013, 20:26   #1
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
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" в папке с нашим проектом и заполним его следующим кодом:

#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.
Спасибо за внимание, надеюсь, кому-нибудь пригодится

Последний раз редактировалось Nikich, 13.08.2013 в 00:41.
(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Nikich за это полезное сообщение:
Кирпи4 (13.08.2013), Gector (16.08.2013)
Старый 16.08.2013, 23:57   #2
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Ответ: Code::Blocks + modern OpenGL

Выдает:
C:\Dev\CPP\GLEW\main.cpp|3|GL/glew.c: No such file or directory|
Эммм... Так куда его пихать?)
(Offline)
 
Ответить с цитированием
Старый 17.08.2013, 01:44   #3
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Code::Blocks + modern OpenGL

Проверь пути во вкладке Compiler, возможно не то указал.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Gector (17.08.2013)
Старый 17.08.2013, 01:58   #4
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Ответ: Code::Blocks + modern OpenGL

Сообщение от Nikich Посмотреть сообщение
Проверь пути во вкладке Compiler, возможно не то указал.
Все точно по инструкции. Где .c-файл должен быть?
(Offline)
 
Ответить с цитированием
Старый 17.08.2013, 02:07   #5
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Code::Blocks + modern OpenGL

Там же, где и glew.h .
(Offline)
 
Ответить с цитированием
Старый 17.08.2013, 02:12   #6
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Ответ: Code::Blocks + modern OpenGL

Сообщение от Nikich Посмотреть сообщение
Там же, где и glew.h .
То есть его надо переместить в "c:\glew\include\"?
(Offline)
 
Ответить с цитированием
Старый 17.08.2013, 02:26   #7
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Code::Blocks + modern OpenGL

В папку /include/GL.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Gector (17.08.2013)
Старый 23.10.2013, 22:27   #8
Gector
Легенда
 
Аватар для Gector
 
Регистрация: 14.10.2007
Сообщений: 3,878
Написано 2,012 полезных сообщений
(для 5,072 пользователей)
Ответ: Code::Blocks + modern OpenGL

Глупый вопрос но все же задам его. Как добавить поддержку предыдущих версий GL?)
(Offline)
 
Ответить с цитированием
Старый 24.10.2013, 00:44   #9
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Code::Blocks + modern OpenGL

Использовать старые версии OGL. Нельзя совместить функционал и нового и старого в одном проекте, как я понимаю, ведь там совсем разные подходы.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Gector (24.10.2013)
Старый 24.10.2013, 19:16   #10
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Code::Blocks + modern OpenGL

Какой самый правильным способ объединить несколько библиотек в одну DLL? Запихнуть все исходники в один и из него уже запилить DLL?
(Offline)
 
Ответить с цитированием
Старый 24.10.2013, 20:59   #11
HolyDel
 
Регистрация: 26.09.2006
Сообщений: 6,035
Написано 1,474 полезных сообщений
(для 2,707 пользователей)
Ответ: Code::Blocks + modern OpenGL

Какой самый правильным способ объединить несколько библиотек в одну DLL? Запихнуть все исходники в один и из него уже запилить DLL?
я делал так.
как показала практика - это самый удобный способ. Собирать статические либы в виде компонентов, или тем более длл-лок оказалось очень муторно. Да, увеличивается время компиляции и особенно время линковки, но зато настройки проекта можно менять очень быстро. Не собирая тыщи либ на каждый чих.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (25.10.2013)
Старый 27.10.2013, 01:21   #12
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Code::Blocks + modern OpenGL

Ещё один вопрос касательно создания библиотеки. Как сделать статичную либу, которая использует для своей работы другие статичные либы?
Для поддержки OGL, приходится использовать как минимум следующие флаги:"-lopengl32 -lgdi32 -luser32 -lkernel32". Поэтому, если либа работает с OGL, она должна включить в себя данные библиотеки, что делать она отказывается Как быть?
(Offline)
 
Ответить с цитированием
Старый 28.10.2013, 09:13   #13
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: Code::Blocks + modern OpenGL

Сообщение от Nikich Посмотреть сообщение
Ещё один вопрос касательно создания библиотеки. Как сделать статичную либу, которая использует для своей работы другие статичные либы?
Для поддержки OGL, приходится использовать как минимум следующие флаги:"-lopengl32 -lgdi32 -luser32 -lkernel32". Поэтому, если либа работает с OGL, она должна включить в себя данные библиотеки, что делать она отказывается Как быть?
статически нельзя слинковать в библиотеку динамические библиотеки, какими является opengl32, glu, glut и т.д. либо смирись, либо компиль динамическую библиотеку. Ты должен понимать, что статическая библиотека, это архив с отдельно откомпилированными исходными файлами c, cpp (единицами трансляции), когда ты линкуешь ее в проект происходит тоже самое если бы использовал исходники, только эти уже заранее откомпилированы. Вот динамическая библиотека наоборот, компилируется и линкуется с другими библиотеками так же как и exe файл. Поэтому при подключении динамической библиотеки не требуется еще указывать кучу зависимых библиотек, но стоит учесть что dll компоненты которые она использует в системе необходимы быть
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Nikich (28.10.2013)
Старый 28.10.2013, 20:27   #14
Nikich
Бывалый
 
Регистрация: 22.12.2011
Сообщений: 844
Написано 150 полезных сообщений
(для 275 пользователей)
Ответ: Code::Blocks + modern OpenGL

Милый Linux умеет объединять, разбивая статик либы на объекты, а потом компонуя обратно в либу. Также вычитал, что и студия умеет. GCC же, видимо, соснул
(Offline)
 
Ответить с цитированием
Старый 28.10.2013, 23:40   #15
Samodelkin
Мастер
 
Регистрация: 12.01.2009
Сообщений: 979
Написано 388 полезных сообщений
(для 631 пользователей)
Ответ: Code::Blocks + modern OpenGL

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


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com