forum.boolean.name

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

HolyDel 15.07.2013 00:26

Ответ: OpenGL
 
Код:

opengl32.lib

HolyDel 22.07.2013 20:48

Ответ: OpenGL
 
OpenGL 4.4 is out! Даже с бета драйверами от nVidia
http://www.opengl.org/registry/doc/glspec44.core.pdf

moka 22.07.2013 20:50

Ответ: OpenGL
 
А можно в кратце, что там нового и т.п.?

HolyDel 22.07.2013 22:32

Ответ: OpenGL
 
Цитата:

New functionality in the OpenGL 4.4 specification includes:
Buffer Placement Control (GL_ARB_buffer_storage)
Significantly enhances memory flexibility and efficiency through explicit control over the position of buffers in the graphics and system memory, together with cache behavior control - including the ability of the CPU to map a buffer for direct use by a GPU.

Efficient Asynchronous Queries (GL_ARB_query_buffer_object)
Buffer objects can be the direct target of a query to avoid the CPU waiting for the result and stalling the graphics pipeline. This provides significantly boosted performance for applications that intend to subsequently use the results of queries on the GPU, such as dynamic quality reduction strategies based on performance metrics.

Shader Variable Layout (GL_ARB_enhanced_layouts)
Detailed control over placement of shader interface variables, including the ability to pack vectors efficiently with scalar types. Includes full control over variable layout inside uniform blocks and enables shaders to specify transform feedback variables and buffer layout.

Efficient Multiple Object Binding (GL_ARB_multi_bind)
New commands which enable an application to bind or unbind sets of objects with one API call instead of separate commands for each bind operation, amortizing the function call, name space lookup, and potential locking overhead. The core rendering loop of many graphics applications frequently binds different sets of textures, samplers, images, vertex buffers, and uniform buffers and so this can significantly reduce CPU overhead and improve performance.

Streamlined Porting of Direct3D applications
A number of core functions contribute to easier porting of applications and games written in Direct3D including GL_ARB_buffer_storage for buffer placement control, GL_ARB_vertex_type_10f_11f_11f_rev which creates a vertex data type that packs three components in a 32 bit value that provides a performance improvement for lower precision vertices and is a format used by Direct3D, and GL_ARB_texture_mirror_clamp_to_edge that provides a texture clamping mode also used by Direct3D.

Extensions released alongside the OpenGL 4.4 specification include:
Bindless Texture Extension (GL_ARB_bindless_texture): Shaders can now access an effectively unlimited number of texture and image resources directly by virtual addresses. This bindless texture approach avoids the application overhead due to explicitly binding a small window of accessible textures. Ray tracing and global illumination algorithms are faster and simpler with unfettered access to a virtual world's entire texture set.
Sparse Texture Extension (GL_ARB_sparse_texture): Enables handling of huge textures that are much larger than the GPUs physical memory by allowing an application to select which regions of the texture are resident for 'mega-texture' algorithms and very large data-set visualizations.
меня особо радуют последние два пункта

moka 22.07.2013 23:50

Ответ: OpenGL
 
Последние два, отлично для GI пойдут и вокселей?
А вот GL_ARB_multi_bind - интерестно как будет работать, т.к. как мне известно биндинги - это не мало производительности уходит, из-за этого делают сортировки и инстансинги.

И GL_ARB_buffer_storage - это как на консолях - один буффер, заместо раздельных RAM <> VRAM?

HolyDel 23.07.2013 02:26

Ответ: OpenGL
 
скорее для мегатекстур.
второе аппаратные мегатекстуры и есть
а первое это возможность в шейдере использовать любую загруженную текстуру. т.е. снимает ограничение на кол-во привязанных текстур.

Nikich 01.08.2013 20:26

Ответ: OpenGL
 
О_о
Это уже что-то совсем невероятное.
Решил опять попробовать openGL на Code::Blocks.
На студии все отлично работает. В Code::Blocks выбираю компилятор студии. Значит все инклюды он берет из студии. Однако - не работает.
Пытается подключить glu.h, которого нет, который и не нужен так как устарел. В чем может быть дело? Может в Code::Blocks забита ранняя версия OpenGL?

St_AnGer 10.08.2013 14:44

Ответ: OpenGL
 
Попробовал создать контекст OpenGl 3.3 по первому уроку gl33lessons (в постак выше ссылка есть), вылетает на создании wglCreateContextAttribsARB (пробовал на нетбуке).

Последующий вопрос конечно глупый, т.к. видеоадаптер у меня Intel GMA 3150, да и гугл ничего хорошего не сообщил мне (поддержка OpenGL 1.4 только вроде)... Но вдруг, каким то чудом, можно... Вообщем, я в глубоком пролёте, да?

Mhyhr 10.08.2013 19:39

Ответ: OpenGL
 
Де-факто да.

HolyDel 10.08.2013 21:31

Ответ: OpenGL
 
wglCreateContextAttribsARB это 3.0 и выше.
на всяких там i3, i5, i7 оно поддерживается.
на нетбуках врятли.
чтобы не вылетало сравнивай с нулем указатель на функцию после получения. по крайней мере будет ясно где ошибка.

ABTOMAT 10.08.2013 23:46

Ответ: OpenGL
 
Цитата:

Сообщение от HolyDel (Сообщение 265119)
wglCreateContextAttribsARB это 3.0 и выше.
на всяких там i3, i5, i7 оно поддерживается.
на нетбуках врятли.
чтобы не вылетало сравнивай с нулем указатель на функцию после получения. по крайней мере будет ясно где ошибка.

На i7 жи нет графического ускорителя?

HolyDel 11.08.2013 12:46

Ответ: OpenGL
 
Цитата:

На i7 жи нет графического ускорителя?
ну я хз с их наименованиями. толи ето i7, толи переименованные i5, но то что на 1155, вроде как с встроенной графикой: http://market.yandex.ru/model-spec.x...9319&hid=91019

Mhyhr 11.08.2013 22:16

Ответ: OpenGL
 
Имею нетбук на i3. Видео встроенное HD 4000. Там держит 3.0 гл на линуксе, и 3.3 на винде.
В спецификации вроде было написано что должен держать 4.0
Хотя я до него ещё и дорос, так что не важно.

Nikich 11.08.2013 22:51

Ответ: OpenGL
 
Появился вопрос, касательно вывода изображений.
Если выводить все изображения за один дип, мы должны использовать один батч, то есть большую текстуру. Но как тогда быть со вращением, изменением размера? Мы же, как я понимаю, заполняем нашу большую текстуру попиксельно из всех изображений. Поэтому, если нам нужно будет нарисовать одно из этих изображений повернутой, придется исхитряться вручную? Или есть какой-то иной способ, кроме попиксельного, сбора большой текстуры из маленьких учитывая все трансформации? Или же нужно использовать несколько батчей, у которых будут свои свойства вращения и масштаба?

HolyDel 11.08.2013 23:03

Ответ: OpenGL
 
Nikich, все неправильно.
в атласе изображения хранятся безо всяких трансформаций.
трансформируются лишь вершины выходного меша.
и каждого спрайта будут свои uv координаты.
т.е. uv координаты статичны и зависят только от спрайта.
а вот позиция уже трансформируется в зависимости от позиции, поворота и скейла спрайта.

Nikich 11.08.2013 23:14

Ответ: OpenGL
 
Оу, я думал, мы используем просто квад, а не меш.
И трансформации выполняются на шейдерном уровне, да?

HolyDel 11.08.2013 23:29

Ответ: OpenGL
 
у меня на цпу. была идея заюзать геометрический шейдер для этого, но что-то лень стало ее реализовывать.

меш состоящий из тыщи квадов. как то так.

тем более ты же вроде уже реализовал это?

Nikich 11.08.2013 23:53

Ответ: OpenGL
 
Спасибо за помощь!
На SDL, а там дела совсем по-другому обстоят:(

Что произошло с популярностью гапи? Почему нереально найти что-то стоящее для современного openGL с 2D? Все забили и используют движки, фреймворки, библиотеки? Миллионы страниц с информацией о том, как вывести картинку в юнити и ничего нормального для openGL.

den 12.08.2013 00:11

Ответ: OpenGL
 
https://code.google.com/p/gl33lessons/
http://steps3d.narod.ru/

вот годные ссылки на современный огл, хотя особых приемов для 2д там вроде нет

Nikich 12.08.2013 16:30

Ответ: OpenGL
 
http://www.openglsuperbible.com/
На официальном сайте openGL была запись о данной книге. Суть в том, что исходной код всех примеров в открытом доступе, а книга написана по современному контексту, то есть отличное сборище примеров по современному контексте доступно по ссылке http://openglsuperbible.com/files/sb...2013_08_05.zip

HolyDel 12.08.2013 16:47

Ответ: OpenGL
 
ухтыж.
не знал что вышла шестая редакция.
с амазона дорого заказывать. 2.5к в рублях.
причем сама книга стоит по божески, что то вроде 1.2к. есть ли способ получить ее дешевле?

HolyDel 13.08.2013 21:22

Ответ: OpenGL
 
таки заказал в амазоне. ибо других вариантов не нашел((

HolyDel 16.08.2013 05:44

Ответ: OpenGL
 
вот, кстати, хорошее ревью 4.4:
http://www.g-truc.net/doc/OpenGL%204.4%20review.pdf

HolyDel 16.08.2013 14:49

Ответ: OpenGL
 
Цитата:

таки заказал в амазоне. ибо других вариантов не нашел((
уже доставили.
с другого конца земли. 3 дня! я в приятном шоке)))

pozitiffcat 16.08.2013 16:32

Ответ: OpenGL
 
sdl научился третий контекст
а вообще лучше freeglut+glew+адекватная IDE наподобие qt-creator+CMake

HolyDel 16.08.2013 18:15

Ответ: OpenGL
 
нафиг они не нужны, все эти sdl.
20 строчек кода на поднятие контекста за платформу. зато полный контроль.

Nikich 18.08.2013 02:30

Ответ: OpenGL
 
Как передать в шейдер множество текстур?
У меня есть большой массив vertexData, в котором хранятся координаты вертексов и координаты текстуры. Рисуется это всё дело за один glDrawArrays(верно ли?). И мне нужно на каждую пару треугольников(квад) наложить свою текстуру. Как это лучше всего сделать?

HolyDel 18.08.2013 06:12

Ответ: OpenGL
 
GL_ARB_BINDLESS_TEXTURE - лучший вариант, но ето только на кеплере и выше. Тут у каждого пикселя может быть своя текстура, что очень круто. Тебе нужно будет лишь добавить к вершине аттрибут - 64битный хэндл текстуры на гпу.

если текстуры одинаковые по формату и размеру - texture array.

если разные - пакуй в атлас.

вообще последний вариант самый неприхотливый

Nikich 18.08.2013 18:40

Ответ: OpenGL
 
А как быть с контекстом постарее?

HolyDel 18.08.2013 19:22

Ответ: OpenGL
 
атлас - хоть на 1.0.

Nikich 20.08.2013 02:45

Ответ: OpenGL
 
Код:

gl_Position = vec4(vposition*mat2(cos(angle),-sin(angle),sin(angle),cos(angle)),0.0,1.0);
vpostion - 2D вектор с координатами точки.
Решил вращать на гапи, передавая в шейдер угол поворота. Матрица проверенная, точно работать должна, однако результат дает очень странный, получается дикое искажение примитива, а не вращение. Как будто используется ещё и z ось. В чем может быть проблема?
Про оптимизацию не надо говорить, написал так здесь для краткости кода.

moka 20.08.2013 02:48

Ответ: OpenGL
 
В гапи ожидается screen space матрица, или ты умножаешь на viewport projection матрицу до твоего поворота?

Nikich 20.08.2013 02:51

Ответ: OpenGL
 
Нет, больше на матрицы я не умножаю. Можно подробнее? Это вообще необходимо при жестком 2D?

moka 20.08.2013 03:06

Ответ: OpenGL
 
Ну прежде чем отдавать в шейдере позицию вершины во фрагментный конвеер ты должен её умножить на матрицу камеры (viewproj).

ABTOMAT 20.08.2013 04:11

Ответ: OpenGL
 
Цитата:

Сообщение от moka (Сообщение 265552)
Ну прежде чем отдавать в шейдере позицию в конвеер ты должен её умножить на матрицу камеры (viewproj).

Не обязательно. Центр экрана - 0,0, углы - +/- единица. Можешь сам к этому масштабу приводить как хочешь.

moka 20.08.2013 05:38

Ответ: OpenGL
 
Цитата:

Сообщение от ABTOMAT (Сообщение 265553)
Не обязательно. Центр экрана - 0,0, углы - +/- единица. Можешь сам к этому масштабу приводить как хочешь.

Ну если заранее умножаешь объект на матрицу viewproj, то следственно и затем трансформируя его на свои повороты - не ожидай адекватного результата.

Ты пытаешься повернуть вершину уже в скрин-спейсе, и тут два варианта - либо ты в шейдере перед этим множишь на viewproj либо ещё до шейдера это делаешь (на CPU).

pozitiffcat 20.08.2013 12:03

Ответ: OpenGL
 
Цитата:

Сообщение от Nikich (Сообщение 265549)
Код:

gl_Position = vec4(vposition*mat2(cos(angle),-sin(angle),sin(angle),cos(angle)),0.0,1.0);
vpostion - 2D вектор с координатами точки.
Решил вращать на гапи, передавая в шейдер угол поворота. Матрица проверенная, точно работать должна, однако результат дает очень странный, получается дикое искажение примитива, а не вращение. Как будто используется ещё и z ось. В чем может быть проблема?
Про оптимизацию не надо говорить, написал так здесь для краткости кода.

Код:

mat2 rotationMat = mat2(cos(angle),-sin(angle),sin(angle),cos(angle));
gl_Position = vec4(vposition*(projMat*viewMat*modelMat*rotationMat));

projMat, viewMat и modelMat - юниформы приезжающие с движка. Проекция, камера и положение объекта на сцене.

и вообще вскрой любой движок, так никто не делает. Обычно это на ЦПУ делается. modelMat должен приехать уже с поворотом, а вместо двух projMat, viewMat можно в шейдер отдавать уже перемноженый projViewMat, актуально для батчей, чтоб не перемножать на каждую вершину.

Nikich 20.08.2013 12:11

Ответ: OpenGL
 
А почему тогда отображение без вращения верно?
И если всё же нужны матрицы, как её рассчитать вручную, без GLM? Просто как-то не ахти подключать дополнительную библиотеку для одного расчета, а гугл явно твердит, что следует использовать GLM.

pozitiffcat 20.08.2013 12:14

Ответ: OpenGL
 
Цитата:

Сообщение от Nikich (Сообщение 265571)
А почему тогда отображение без вращения верно?
И если всё же нужна viewproj матрица, как её рассчитать вручную, без GLM? Просто как-то не ахти подключать дополнительную библиотеку для одного расчета, а гугл явно твердит, что следует использовать GLM.

да используй GLM. Там cpp-шников нет, библиотека построена на шаблонах, точно будет лучше, чем изобретать велосипед. Ну если так хочешь сам, то кури перемножение матриц. Вообще, рано или поздно, тебе придется использовать математическую библиотеку.
Можешь еще спросить у HolyDel, он реализовывал без GLM. Только вроде для mat4x4

p.s. если верно без вращения, значит ты уже в скрин спейсе формируешь и отправляешь в шейдер, тогда поворот будет работать относительно не своего центра, а точки 0.0 на экране, это центр

зачем тогда вообще на матрицу умножать?
вот на, кусок с моего движка
Код:

point BatchOpenGL::rotatePoint(float cx, float cy, float angle, point p)
{
    float s = sin(angle);
    float c = cos(angle);

    // translate point back to origin:
    p.x -= cx;
    p.y -= cy;

    // rotate point
    float xnew = p.x * c - p.y * s;
    float ynew = p.x * s + p.y * c;

    // translate point back:
    p.x = xnew + cx;
    p.y = ynew + cy;

    return p;
}

учти что angle может быть в углах или радианах. в чем точно не помню. Формула такая: Угол = Радиан * (180 / Пи)

Nikich 20.08.2013 12:21

Ответ: OpenGL
 
У HolyDel же с 3D, мне оно вообще не нужно и не планируется, поэтому камера всегда будет в одном и том же положении, значит и матрица проекции на камеру тоже всегда будет одна и та же.

pozitiffcat 20.08.2013 12:25

Ответ: OpenGL
 
Цитата:

Сообщение от Nikich (Сообщение 265573)
У HolyDel же с 3D, мне оно вообще не нужно и не планируется, поэтому камера всегда будет в одном и том же положении, значит и матрица проекции на камеру тоже всегда будет одна и та же.

короче, можешь попробовать прилепить в шейдер код, что я дал.

HolyDel 20.08.2013 16:00

Ответ: OpenGL
 
у парня жеское 2д.
ему пока ненужны ни матрицы проекции ни что то другое.

Код:

gl_Position = vec4(vposition*mat2(cos(angle),-sin(angle),sin(angle),cos(angle)),0.0,1.0);
vposition у тебя в -1..1, или как? так то код правильный. для спрайта в координатах 0,0 конечно. возможно проблема где то еще. покажи скрин или лучше демку.

Цитата:

Ты пытаешься повернуть вершину уже в скрин-спейсе, и тут два варианта - либо ты в шейдере перед этим множишь на viewproj либо ещё до шейдера это делаешь (на CPU).
ему ничего не нужно проецировать. у него объекты итак в скринспейсе.

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

Nikich 20.08.2013 17:10

Ответ: OpenGL
 
А, и ещё вопрос. Рисовать линию как 2 треугольника нормально? Я знаю, что OGL поддерживает свой вывод линий, но тогда придется прибегнуть уже к другому DIP.

HolyDel 20.08.2013 17:19

Ответ: OpenGL
 
вывести линию может быть дороже чем два треугольника.

+ треугольниками гибче, линия может быть любой ширины, ее можно затекстурить, и т.д.

pozitiffcat 22.08.2013 17:51

Ответ: 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;
}


HolyDel 23.08.2013 01:09

Ответ: OpenGL
 
Слушай, друг, а ты для cmake сам собирал етот CMakeList.txt или какой-то тулзой его можно выгрузить со студии?

pozitiffcat 23.08.2013 10:18

Ответ: OpenGL
 
Цитата:

Сообщение от HolyDel (Сообщение 265728)
Слушай, друг, а ты для cmake сам собирал етот CMakeList.txt или какой-то тулзой его можно выгрузить со студии?

всегда сам. там же легко.

HolyDel 23.08.2013 15:53

Ответ: OpenGL
 
у меня 1586 файла в сурсах (из них только 175 мои, остальные библиотеки). очень муторно вручную будет собирать((.

pozitiffcat 23.08.2013 22:26

Ответ: OpenGL
 
ты из cmake можешь вызывать сборку сторонних либ, их не обязательно переписывать на cmake.

Nikich 26.08.2013 02:02

Ответ: OpenGL
 
Вопрос по альфе. Если у нас два триса с альфой, рисуются они за один дип и касаются друг друга, почему не наблюдается прозрачность? Дело точно не в передаче шейдеру, вручную вбивал 0.5 на альфе, все равно трисы полностью непрозрачны.

Mr_F_ 26.08.2013 02:13

Ответ: OpenGL
 
штуки с альфой надо сортировать от дальних к ближним.
рисовать полупрозрачную невыпуклую геометрию в 1 дип фигня выйдет с половины ракурсов.
а два пересекающихся крестом триангла вообще нормально не сделаешь.

ну и да, надо блендинг отдельно в апи включать, а не только в шейдере писать альфу, режимов блендинга много разных.
не знаю где оно в ГЛ, юзаю ДХ =]

jimon 26.08.2013 02:13

Ответ: OpenGL
 
Блендинг включил ? =)

ABTOMAT 26.08.2013 03:56

Ответ: OpenGL
 
Цитата:

Сообщение от Nikich (Сообщение 265916)
Вопрос по альфе. Если у нас два триса с альфой, рисуются они за один дип и касаются друг друга, почему не наблюдается прозрачность? Дело точно не в передаче шейдеру, вручную вбивал 0.5 на альфе, все равно трисы полностью непрозрачны.

Дептх тест отруби.
У меня это делается так:

gl.disable(gl.DEPTH_TEST);

В "большом" OGL наверное как-то похоже.

Вообще см. порядок рендера. Бленденные объекты надо рендерить после всех остальных. Вообще скриншоты бы неплохо, но в целом диагноз: без сортировки с альфой получишь дерьмецо.

pozitiffcat 27.08.2013 22:20

Ответ: OpenGL
 
http://www.opengl.org/sdk/docs/man/x...lDepthFunc.xml
тебе в помощь, меня когда-то выручало, когда партиклы рисовал

а вообще перед отрисовкой всякой херни, для которой временно нужно отключить глубину, но что бы она не перекрывала существующую юзай это
http://www.opengl.org/sdk/docs/man/x...lDepthMask.xml

Nikich 28.10.2013 00:46

Ответ: OpenGL
 
Есть ли годная библиотека/алгоритм для создания атласа из текстурок налету? Всё таки хочется сделать весь рендер в один DIP, однако рендер текста с FreeType явно требует множества DIP(умельцы на http://en.wikibooks.org/wiki/OpenGL_...t_Rendering_01 вообще предлагают каждый символ за отдельный DIP рисовать).

pozitiffcat 28.10.2013 09:19

Ответ: OpenGL
 
Цитата:

Сообщение от Nikich (Сообщение 269402)
Есть ли годная библиотека/алгоритм для создания атласа из текстурок налету? Всё таки хочется сделать весь рендер в один DIP, однако рендер текста с FreeType явно требует множества DIP(умельцы на http://en.wikibooks.org/wiki/OpenGL_...t_Rendering_01 вообще предлагают каждый символ за отдельный DIP рисовать).

При создании текста строишь буффер с заданными текстурными координатами на каждую букву из bitmap шрифта, и рисуй за один дип. Я так целую страницу текста за 1 дип рисовал. Только тебе придется распарсить freetype2 на bitmap текстуру

Samodelkin 17.06.2014 23:28

Ответ: OpenGL
 
Я решил что мне пора за opengl основательно взяться.
Так вот сегодня начал разбираться и непонятна такая вещь:
допустим мне надо определённый ректангл закрасить цветом с помощью glClear. В доках написано что можно юзать glScissor.
Ок я сделал так:
Код:

glEnable( GL_SCISSOR_TEST );
glScissor( 100, 100, 50, 50 );
glClear( GL_COLOR_BUFFER_BIT );
glDisable( GL_SCISSOR_TEST );

Но закрашивается весь экран целиком.
Видимо я что то упустил.

Mr_F_ 17.06.2014 23:57

Ответ: OpenGL
 
не знаю точно насчёт GL, но вот из dx10-11 убрали фичу клеара ректанглов (в 9 была) по каким-то причинам что типа железо так не умеет нормально делать все равно. советуют рисовать квад с цветом очищения)
т.к. проблема вроде завязана на хардваре, то и в gl возможно то же.
---
бррр... похоже это было только в 10, в 11 снова можно клеарить ректанглы.
---
а, нет, в 11 тоже нельзя, но можно в 11.1
---
могу точно сказать что в юнити на дх11 клеар делается рисованием квадов

Samodelkin 18.06.2014 00:05

Ответ: OpenGL
 
OpenGL очень запутанная вещь!

Собственно да, поэтому и спрашиваю, в d3d9 можно не просто рект закрасить, но и передать массив ректов за один вызов Clear.

Samodelkin 18.06.2014 00:18

Ответ: OpenGL
 
Да походу дела на glClear скиссор не влияет, потому что квад обрезается скиссором, а заполнение цвета - нет.

moka 18.06.2014 01:06

Ответ: OpenGL
 
А тут пишут что все ок: http://gamedev.stackexchange.com/que...e-of-glscissor

HolyDel 18.06.2014 01:22

Ответ: OpenGL
 
у меня работало.

Samodelkin 18.06.2014 01:36

Ответ: OpenGL
 
Ну что, значит у меня левый opengl =).
Дальше поразбираюсь в нём чтоб хоть как то ориентироваться, тогда может быть попробую поэкспериментировать со скиссором.

HolyDel 18.06.2014 03:03

Ответ: OpenGL
 
у меня правда это было на мульткамерах.
там помимо scissor-a был еще и glViewport


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

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