Тема: OpenGL
Показать сообщение отдельно
Старый 22.08.2013, 17:51   #109
pozitiffcat
Мастер
 
Аватар для pozitiffcat
 
Регистрация: 09.05.2010
Адрес: Самара
Сообщений: 1,083
Написано 254 полезных сообщений
(для 533 пользователей)
Ответ: OpenGL

запилил за пол дня супер легковесный 2д движок на опенгл 2 контексте, без матриц (как тебе нужно), можно вращать, правда на цпу. Еще можно выводить отдельные части текстуры (атлас), еще батчи есть.

Репо
https://bitbucket.org/pozitiffcat/ste

Умеет только TGA со сжатием или без. Можно расширять своими классами для загрузки файлов и конвертирование изображений. Так сказать движок открыт для расширений.

Делал для себя (вчера понял что надо сделать), чтоб легко писать под ios, android. Собирается на mac и linux посредством cmake

есть скрипт сборки для линукса. Соберет статически либу и тестовое приложение.
В убунте нужно sudo apt-get install freeglut3-dev

Библиотека работает на контексте, тоесть можно собрать без GLUT и внедрять в любой контекст, Qt, Android, iOS, SDL и т.п.

пример кода:
#include "steGlutApp.h"
#include "steRender.h"
#include "steImage.h"
#include "steFileStream.h"
#include "steTGAImageLoader.h"
#include "steDrawImageData.h"
#include "steBatch.h"

class MyApp : public ste::GlutApp
{
public:
    virtual void onInit()
    {
        m_render = createRender();
        m_render->setScreenSize(240, 320);
        m_render->setClearColor(0.3f, 0.4f, 0.5f);

        m_imageLoader = new ste::TGAImageLoader();

        m_stream = new ste::FileStream("test_c.tga", ste::FileOpenReadMode);

        m_image = m_render->createImage(m_imageLoader, m_stream);
    }

    virtual void onFrame()
    {
        m_render->clear();

        static float r = 0;
        r += 0.01;

        ste::Batch batch;

        ste::DrawImageData data;
        data.frame = ste::rect(0.5 ,0.5, 0.5, 0.5);
        data.size = ste::vec2(100, 100);
        data.position.x = 50;
        data.position.y = 100;
        data.center.x = 0.5;
        data.center.y = 0.5;
        data.centerIsDrawPoint = true;
        data.rotation = r;
        batch.addImage(data);

        data.frame = ste::rect(0 ,0.5, 0.5, 0.5);
        data.position.x = 50;
        data.position.y = 200;
        data.center.x = 0.0;
        data.center.y = 0.0;
        data.rotation = 0;
        batch.addImage(data);

        m_render->drawImage(m_image, &batch);
    }

    virtual void onClose()
    {
        delete m_render;
        delete m_image;
        delete m_imageLoader;
        delete m_stream;
    }

private:
    ste::Render *m_render;
    ste::Image *m_image;
    ste::TGAImageLoader *m_imageLoader;
    ste::FileStream *m_stream;
};

int main()
{
    MyApp app;
    app.init(240, 320);
    app.start();
    return 0;
}
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
HolyDel (22.08.2013)