К основному контенту

Вводная

Решил потихоньку сливать в сеть, свои разные эксперименты в сфере программирования. Меня больше интересует 3D графика и игрострой, так что всё будет крутиться около этих составляющих. Ну и C++, OpenGL, GLSL и прочая братия - будут присутствовать ))

Комментарии

Популярные сообщения из этого блога

Ray marching и не только

Давненько я не баловался фракталами, а руки что-то чешутся... Видимо пора сотворить что-то и поделиться с миром ) Но всё меняется, вернее давно поменялось, фракталы уже давно рисуются шейдерами, как правило фрагментными. И то что я когда то делал (ковёр Серпинского, остора Коха и другое - на основе линий) - увы, уже не впечатляет ;) Скрины 3d фракталов впечатляют и завораживают, глядя на некоторые даже не верится, что их сотворил алгоритм. Для визуализации поверхности, которая не определена полигонами, мы попробуем использовать ray marching (raymarching, марширующий луч, марш луча, ну в общем за точность перевода не ручаюсь), а результат думаю скоро сами увидим )) Важно заметить, что эта техника используется не только для рисования фракталов. И так, в чём же суть? Всё очень просто.  Допустим у нас есть, некая поверхность, точка наблюдателя (позиция камеры, глаза), есть луч, направленный из позиции наблюдателя. Теперь мы начинаем продвигаться по лучу (маршировать). На каждо...

Замеряем скорость выполнения команд OpenGL

Самый простой вариант, это обозначить тестируемый блок команд вызовами  glBeginQuery (GL_TIME_ELAPSED, id)   и    glEndQuery (GL_TIME_ELAPSED) . Результат получаем командой  glGetQueryObjectui64v или  glGetQueryObjectuiv , в зависимости от разрядности счётчика, 32 бит может и не хватить (в наносекундах, как никак). Важное замечание, что за меряется только только затраченное на выполнение команд OpenGL. Вариант №1: GLuint id; GLuint64 elapsedTime; glGenQueries( 1 , &id ); // Начало блока glBeginQuery(GL_TIME_ELAPSED, id); //Тут пишем код, который надо проверить //Окончание проверяемого блока glEndQuery(GL_TIME_ELAPSED); // Тут могут быть другие команды OpenGL, скорость которых не надо замерять // получаем затраченное время в наносекундах glGetQueryObjectui64v(id, GL_QUERY_RESULT, & elapsedTime); Вариант №2: GLuint queryStart, queryEnd; // query id GLuint64 startTime, endTime; GLuint64 elapsedTime; ...