Показать сообщение отдельно
Старый 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)