HLFX.Ru Forum
профиль •  правила •  регистрация •  календарь •  народ •  FAQ •  поиск •  новое •  сутки •  главная •  выход  
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > XashNT: блог разработчика
Часть II
Страницы (32): « Первая ... « 28 29 30 31 [32]   Предыдущая тема   Следующая тема
Автор
Тема Новая тема    Ответить
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32961
Нанёс повреждений: 392 ед.

Рейтинг



Ну чтож, перевёл отладочную отрисовку на VAO + VBO + шейдеры.
Из менеджера VBO выбросил кучу жуткого кода, написанного в 2019-м году, там килобайт 50 шаблонов было, чтобы в компайл-тайм конструировать какие-то дефолтные типы фиксированных вертексов, причём я уже и сам крайне смутно помнил как там всё это работает. Ну и соответственно больше это не нужно, код стал чище и понятнее.

Мне осталось только переработать систему отладочной отрисовки, которая рендерит линии. Это многоцелевая система, она используется для совершенно разных задач. С её помощью рисуются каркасы хитбоксов, ббоксы, стрелочки контактов ну и всё такое прочее аналогичное.
Важной особенностью системы является то, что отладочную отрисовку не надо вызывать каждый кадр. Она будет рендерится пока эти линии пользователь не удалит явным образом. То есть тут не совсем тривиальная вещь. Когда с этой системой разберусь, можно будет наконец двигаться дальше по документу.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 223856

Старое сообщение 14-03-2025 15:10
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32961
Нанёс повреждений: 392 ед.

Рейтинг



Я это сделал! Теперь XashNT абсолютно всё рендерит через VAO+VBO (IBO опционально). Самые сложные задачи, которые повлекли за собой и рефакторинг, и даже, как вы знаете - изменение формата шрифтов успешно решены. Давайте ещё раз пройдемся по тому списку и посмотрим что было сделано.

Добавлено 15-03-2025 в 19:40:

Цитата:
Profiles define subsets of OpenGL functionality targeted to specific application domains. OpenGL 3.2 defines two profiles (see below), and future versions may introduce additional profiles addressing embedded systems or other domains. OpenGL 3.2 implementations are not required to support all defined profiles, butmust support the core profile described below.

В процессе имплементации выяснилось несколько неприятных вещей. Так в частности различные встройки от Intel умеют максимум в OpenGL 3.1 на Windows и OpenGL 3.3 на Linux. Почему такое происходит сказать затрудняюсь, тем не менее - вот. Причём в режиме совместимости они могут возвращать абсолютно любую бредятину, рапортуя о поддержке всего на свете, тогда как по факту ничего подобного. Ну может они пытаются это проэмулировать? Этот момент предстоит ещё выяснить. Но пока что я для себя определил базовую версию Core Profile как 3.1. Там правда нет инстансинга, но всё остальное работать будет.

Цитата:
OpenGL 3.2 is the first version of OpenGL to define multiple profiles. The core profile builds on OpenGL 3.1 by adding features described in section H.1. The compatibility profile builds on the combination of OpenGL 3.1 with the special GL_ARB_compatibility extension defined together with OpenGL 3.1, addingthe same new features and in some cases extending their definition to interact with existing features of OpenGL 3.1 only found in GL_ARB_compatibility. It is not possible to implement both core and compatibility profiles in a single GL context, since the core profile mandates functional restrictions not present in the compatibility profile. Refer to the WGL_ARB_create_context_profile and GLX_ARB_create_context_profile extensions (see appendix J.3.68) for information on creating a context implementing a specific profile.

Вот тут к слову опять непонятно. Значит ли это, что в версии 3.1 нет никакого Core Profile? Или может быть мне необходимо как бы придерживаться Core версии через самоцензуру? Пока непонятно, но я не исключаю такой момент. Главное чтобы работало у всех.

Цитата:
Wide lines -LineWidth values greater than 1.0 will generate an INVALID_-VALUE error

Барнес сказал, что эту фичу никто не выбросил, но работают только фиксированные значения, например 2.0 или 4.0. Ну хорошо, я как раз 2.0 и использую. Большего мне и не нужно. Так что пусть остается. В крайнем случае сделаю какую-нибудь проверку.

Добавлено 15-03-2025 в 20:01:

Цитата:
Global component limit query - the implementation-dependent values MAX_VARYING_COMPONENTS and MAX_VARYING_FLOATS.

Это выбросил. Да оно собственно и не использовалось никогда. Хотя и было выведено в систему материалов, где тоже никогда не использовалось.

Цитата:
Application-generated object names - the names of all object types, such as buffer, query, and texture objects, must be generated using the corresponding Gen* commands. Trying to bind an object name not returned by a Gen* command will result in an INVALID_OPERATION error. This behavior is already the case for framebuffer, renderbuffer, and vertex array objects. Object types which have default objects (objects named zero), such as vertex array, framebuffer, and texture objects, may also bind the default object, even though it is not returned by Gen*.

Ещё раз всё проверил - таких имён у меня нет, всё генерируется через glGen.

Цитата:
Color index mode - No color index visuals are supplied by the window system-binding APIs such as GLX and WGL, so the default framebuffer is always in RGBA mode. All language and state related to color index mode vertex, rasterization, and fragment processing behavior is removed. COLOR_INDEX formats are also deprecated.

Этого у меня и не было.

Цитата:
OpenGL Shading Language versions 1.10 and 1.20. These versions of the shading language depend on many API features that have also been deprecated.

Да, здесь предстоит масштабная работа по переписыванию всех шейдеров. Собственно, это и есть ближайшая задача по продолжению миграции на Core Profile. И кстати версию шейдеров придётся выбирать либо 130, либо 140. Пока ещё не решил.

Цитата:
Begin/End primitive specification -Begin, End, and EdgeFlag*; Color*, FogCoord*, Index*, Normal3*, SecondaryColor3*, TexCoord*, Vertex* Vertex*; and all associated state.Vertex arrays and array drawing commands must be used to draw primitives. However, VertexAttrib* and the current vertex attribute state are retained in order to provide default attribute values for disabled attribute arrays.

Успешно избавился - больше нигде не используется. Собственно именно эта задача и отняла у меня больше всего времени, спровоцировала изменение RenderAPI в Шоте, изменение формата шрифтов и затронул кучу подсистем, которые пришлось отрефакторить. По времени - больше недели. И это несмотря на то, что в 3D весь рендеринг давно уже использует VAO + VBO + Shader. Но по крайней мере я сделал всё правильно, а не наговнял по быстрому. Теперь в рендеринге 2д-изображений появилась поддержка материалов, шейдеров и открылась куча новых возможностей.

Цитата:
Edge flags and fixed-function vertex processing ColorPointer, EdgeFlagPointer, FogCoordPointer, IndexPointer, NormalPointer, SecondaryColorPointer, TexCoordPointer, VertexPointer, EnableClientState, DisableClientState, and InterleavedArrays, ClientActiveTexture; Frustum, LoadIdentity, LoadMatrix, LoadTransposeMatrix, MatrixMode, MultMatrix, MultTransposeMatrix, Ortho, PopMatrix, PushMatrix, Rotate, Scale, and Translate; Enable/Disable targets RESCALE_NORMAL and NORMALIZE; TexGen* andEnable/Disable targets TEXTURE_GEN_*, Material*, Light*, LightModel*, and ColorMaterial, Shade-Model, and Enable/Disable targets LIGHTING. VERTEX_PROGRAM_TWO_SIDE, LIGHTi, and COLOR_MATERIAL; ClipPlane; and all associated fixed-function vertex array, multitexture, matrix and matrix stack, normal and texture coordinate, lighting, and clipping state. A vertex shader must be defined in order to draw primitives. Language referring to edge flags in the current specification is modified asthough all edge flags are TRUE. Note that the FrontFace and ClampColor commands are not deprecated, as they still affect other non-deprecated functionality; however, the ClampColor targets CLAMP_VERTEX_COLOR and CLAMP_FRAGMENT_COLOR are deprecated

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

Цитата:
Client vertex and index arrays - all vertex array attribute and element array index pointers must refer to buffer objects. The default vertex array object (the name zero) is also deprecated. Calling VertexAttribPointer when no buffer object or no vertex array object is bound will generate an INVALID_OPERATION error, as will calling any array drawing command when no vertex array object is bound.

Тут всё в порядке - всё лежит в соответствующих массивах VBO.

Цитата:
Rectangles -Rect*.

По правде говоря, ксаш даже эти экспорты никогда не подтягивал, ни новый ни старый.

Цитата:
Current raster position RasterPos*andWindowPos*, and all associated state.

Аналогично ректанглам. Не использовалось.

Цитата:
Two-sided color selection Enable target VERTEX_PROGRAM_TWO_SIDE; OpenGL Shading Language builtins gl_BackColor and gl_BackSecondaryColor; and all associated state.

Не использовалось.

Цитата:
Non-sprite points Enable/Disable targets POINT_SMOOTH and POINT_SPRITE, and all associated state. Point rasterization is always performed as though POINT_SPRITE were enabled

Не использовалось. Я вообще от греха подальше выбросил рендеринг GL_POINTS. Да и нет в нём никакой особенной необходимости. Вот линии нужны, а точки нет.

Цитата:
Wide lines and line stipple -LineWidthis not deprecated, but values greater than 1.0 will generate an INVALID_VALUE error; LineStipple and Enable/Disable target LINE_STIPPLE, and all associated state.

Повторюсь - вроде бы как работает. Ну может только на Нвидии. Проверим.

Цитата:
Quadrilateral and polygon primitives - vertex array drawing modes POLYGON,QUADS, and QUAD_STRIP, related descriptions of rasterization of non-triangle polygons, and all associated state.

На данный момент ксаш оперирует только двумя типами примитивов - GL_LINES и GL_TRIANGLES. Так что и здесь всё в порядке.

Добавлено 15-03-2025 в 20:04:

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

1. Избавиться от LoadMatrix
2. Избавиться от "йопанных клипплейнов"
3. Переписать все шейдеры ну как минимум на версию 130 (судя по всему версии 130 и 140 мало чем отличаются друг от друга).

Когда же и эти задачи будут выполнены, можно будет переходить уже к новым пунктам в документе.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 223859

Старое сообщение 15-03-2025 17:04
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32961
Нанёс повреждений: 392 ед.

Рейтинг



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

https://registry.khronos.org/OpenGL...ngSpec.1.30.pdf
https://registry.khronos.org/OpenGL...ngSpec.1.40.pdf
https://registry.khronos.org/OpenGL...ngSpec.1.50.pdf
https://registry.khronos.org/OpenGL...ngSpec.3.30.pdf

Здесь, как вы видите старый добрый принцип всё ещё в действии - подставляя в адрес просто другие циферки попадаешь на правильную страничку.

Добавлено 16-03-2025 в 13:08:

Переход на новую версию шейдерного языка - это как бы вложенная подзадача в рамках миграции, поэтому давайте разберём, что же именно устарело с предидущей версии 120.

Цитата:
Use of the keywords attribute andvarying (use in and out).

Вот этот момент меня к слову и выбесил больше всё в своё время. Просто так на ровном месте бери да заменяй модификаторы на новые. Ну ладно, что тут сделаешь.

Цитата:
Use of gl_ClipVertex (use gl_ClipDistance)

Вот эту словесную конструкцию я не понял если честно. То есть понятно, что gl_ClipVertex устарел. Но здесь что предлагается? Использовать gl_ClipDistance вместо этого? Или gl_ClipDistance тоже устарел?
Но вот на сайте хроноса написано следующее:
Цитата:
gl_ClipDistance — provides a forward-compatible mechanism for vertex clipping

То есть я должен самостоятельно рассчитать уравнение плоскости от кастомной клип-плоскости и записать его в gl_ClipDistance. Ну ок, это без проблем вообще. Основная идея, как я понимаю, заключается в том, чтобы не пришлось самостоятельно кидать эту переменную во фрагментник, делать там условие с дискардом. OpenGL эту работу сам выполнит.

Цитата:
Use of gl_FragData and gl_FragColor (use user-defined out instead).

Ага, ну про это я тоже в курсе. Надо самостоятельно забиндить выходные атрибуты. Это нужно для более гибкого управления MRT, как я понимаю.

Цитата:
Built-in attributes. Use user-defined vertex inputs instead.

Тут проблем нет - у меня все атрибуты юзер-дефайнед.

Цитата:
Fixed function vertex or fragment stages mixed with shader programs. Provide shaders for all activeprogrammable pipeline stages.

Известная штука - ранее можно было объявить только один из двух шейдеров, а второй OpenGL брал по умолчанию с фиксированным функционалом. Теперь всё надо объявлять явным образом. Именно так я всегда и делал.

Цитата:
All built-in texture function names. See new names.

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

Цитата:
Use of the built-in varyings gl_FogFragCoord and gl_TexCoord. Use user-defined variable instead

Первое никогда не юзал, а второе успешно выбросил, если и было.

Цитата:
The built in function ftransform. Use the invariant qualifier on a vertex output instead

Эту функцию я тоже не юзаю, хотя и в курсе про нее конечно.

Цитата:
Most built-in state.

Расплывчато. Видимо по ходу буду разбираться.

Цитата:
gl_MaxVaryingFloats (use gl_MaxVaryingComponents instead)

Не юзал.

Цитата:
Built-in coloring: gl_FrontColor, gl_FrontSecondaryColor, gl_Color, gl_SecondaryColor,gl_BackColor and gl_BackSecondaryColor

Не юзаю.

Добавлено 16-03-2025 в 13:28:

Теперь давайте посмотрим, что же добавилось в версии GLSL 140 по сравнению с версией 130.

Цитата:
Add uniform blocks and layouts to be backed by the application through buffer bindings

Честно говоря не очень понял тут. То ли в 1.3 эту поддержку убрали, а в 1.4 снова добавили, но мне надо чтобы шейдер неявно пронумеровал атрибуты, а приложение просто взяло эти индексы - это важная часть системы материалов, которая позволяет выбрасывать из загружаемого VBO неиспользованные атрибуты и таким образом экономить видеопамять.

Цитата:
Rectangular textures, including the closure of the functionality indicated by the originaltexture_rectangle extension, the gpu_shader4 extension and the 1.3 version of GLSL

А вот это действительно важная вещь. Поясню почему. Дело в том, что некоторые вендоры на некоторых версиях драйверов (Интел, ага) непременно требуют, чтобы включение расширений происходило на начальных строках исходного текста шейдера. Из чего следует нехитрый вывод - я уже толком не могу это написать прямо в теле шейдера и в произвольном месте. Лучше всего это автоматически включить в тело шейдера. Вот тут-то и кроется засада! У меня нет механизмов для четкого определения что я использую ректангл-текстуру! То есть было бы гораздо лучше, если бы она просто поддерживалась в базе, да и всё. Поэтому имеет смысл сразу целиться на версию GLSL 140. Версия 140 - это как раз OpenGL 3.1, то есть именно то что и нужно. Тут всё в порядке.

Цитата:
Texture buffers

Не юзал, но возможно и буду. Дело такое.

Цитата:
Add gl_InstanceID for instance drawing

Ага, вот именно с версии 140 он уже в базе. Это отличная новость.
Но прикол в том, что glDrawElementsInstancedBaseVertex поддерживается только с версии 3.2. Взрыв мозга!

Цитата:
Don't require writing to gl_Position

Пока что ничего не могу сказать по этому поводу. Разумеется я всегда записываю результат в gl_Position. Ситуации, когда этого не требуется, у меня не возникало вроде.

Добавлено 16-03-2025 в 13:35:

Следующий шаг: посмотрим что удалено в версии 1.4 по сравнению с 1.3. Т.е. для версии 1.3 они были просто нежелательны к использованию, но всё ещё продолжали работать, а тут их совсем удолили нахрен.

Цитата:
Use of gl_ClipVertex. Use gl_ClipDistance instead

Тут понятно, так и сделаю.

Цитата:
Built-in vertex shader inputs.

Не юзаю, тут всё хорошо.

Цитата:
Built-in uniforms except for depth range parameters

Наверное это всё что начинается с префикса gl_, разумеется за исключением gl_VertexID и gl_InstanceID.

Цитата:
Built-in interface between vertex and fragment: gl_TexCoord, gl_FogFragCoord, and all the colorvalues.

Не юзаю.

Цитата:
Built-in two-sided coloring.

Не юзаю.

Цитата:
Fixed functionality for a programmable stage. Supply shaders for all stages currently being used.

Не юзаю.

Цитата:
ftransform(). Use invariant outputs instead.

Не юзаю.

Добавлено 16-03-2025 в 13:40:

Про версию шейдеров 150 кратко скажу, что там добавились геометрические шейдеры, а так же фетчинг для MSAA, но мне пока что это всё не нужно.
Тут бы с текущим разобраться, так сказать. В версию шейдеров 330 я тоже заглянул - по сравнению с версией 150 там ничего удалено не было, но добавился ARB_explicit_attrib_location который мне не нужен.

Итак, рабочий вариант - целимся на GL 3.1 и версию шейдеров 140.
Правда здесь есть две очевидных несуразности.
1. Инстансинг поддерживается только с версии GL 3.2
2. В OpenGL 3.1 вообще нет Core Profile.

Но в любом случае выбросить всё старое можно и не переключаясь на Core Profile - между прочим профит от исключения вызовов фиксированного конвейера из кода реально есть. Продолжаю работу.

Добавлено 16-03-2025 в 14:19:

PS. Маленькая поправка: gl_ClipDistance можно будет использовать не раньше перехода на версию 130 или 140. На версии 120 этого сделать не даёт даже NVidia.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 223860

Старое сообщение 16-03-2025 11:19
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 13483
Возраст: 33

Рейтинг



Супер! Работа проделана большая. А что такое VAO и IBO?

Цитата:
Дядя Миша писал:
Да откуда ты понабрался этой пакости?
Что значит "прикрутить свои форматы" ? А может ты тогда заодно прикрутишь вообще всё, и операционную систему впридачу, и компьютер сам соберёшь и кремний из песка тоже добудешь, я правильно понимаю?


Я просто вижу что ты пишешь движок-эмулятор для других игр. И в этом контексте возможность подключать форматы этих игр была бы к месту, чтобы не искать исходники. Понятно что эта фича не для каждого, но зато тебе не нужно будет таскать все нужные тебе форматы во всех играх, а сделать их подгрузку для конкретной игры индивидуально. Чисто архитектурно я считаю это изящное решение.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 16-03-2025 в 12:33

Сообщить модератору | IP: Записан
Сообщение: 223861

Старое сообщение 16-03-2025 12:30
- За что?
Ku2zoff
Мастер Ёда из Деревни Дуракоф

Дата регистрации: Apr 2007
Проживает: В Деревне дураков
Сообщений: 6816
Возраст: 34

Рейтинг



Много текста, это, конечно, здорово. Хотелось бы увидеть, что и как движок на данный момент рисует. Особенно в свете последних требовательных игр, типа Инди Джонса и второго Свалкера. У меня от обоих видюха в 2k разрешении просто задыхается. А картинка на уровне первого Деда под спайсом, только текстуры чётче. Вот и не понятно, на что мощности компа расходуются.

Сообщить модератору | IP: Записан
Сообщение: 223862

Старое сообщение 16-03-2025 13:05
- За что?
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 13483
Возраст: 33

Рейтинг



Цитата:
Ku2zoff писал:
Много текста, это, конечно, здорово. Хотелось бы увидеть, что и как движок на данный момент рисует. Особенно в свете последних требовательных игр, типа Инди Джонса и второго Свалкера. У меня от обоих видюха в 2k разрешении просто задыхается. А картинка на уровне первого Деда под спайсом, только текстуры чётче. Вот и не понятно, на что мощности компа расходуются.


На скриншотах будет думаю тоже самое. А вот производительность покажет только будующий бетатест.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | IP: Записан
Сообщение: 223863

Старое сообщение 16-03-2025 13:08
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32961
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
FiEctro писал:
А что такое VAO и IBO?

Vertex Array Object и Index Buffer Object. VBO хранит вертексы, IBO хранит индексы, VAO ссылается на VBO + IBO + раскладку вертекса в памяти для этих буфферов.

Цитата:
FiEctro писал:
Я просто вижу что ты пишешь движок-эмулятор для других игр

Я не пишу движок-эмулятор для других игр, очевидно же. Это приятная побочная возможность, но не более того. Старые игры помогают отладить движок и сделать его стабильным и проверенным в реальных условиях.

Цитата:
FiEctro писал:
но зато тебе не нужно будет таскать все нужные тебе форматы во всех играх, а сделать их подгрузку для конкретной игры индивидуально

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

Цитата:
FiEctro писал:
Чисто архитектурно я считаю это изящное решение.

Возьми движок от ночных водолазов, как он там называется. Вот эта помойка умеет работать с любыми форматами, потому что там просто половину кода от старой игры копируют на некую базу и таким образом получают совместимость. Разумеется движок, сконфигурированный для q1 и для q2 таким образом - это две разные версии движка, между которыми нет ничего общего. Особенно приятно всё это поддерживать, я полагаю.

Цитата:
Ku2zoff писал:
Хотелось бы увидеть, что и как движок на данный момент рисует

Только через запись в бета-тестеры.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 223864

Старое сообщение 16-03-2025 13:18
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 13483
Возраст: 33

Рейтинг



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


Движок работает с треугольниками и текстурными координатами, а что там за форматы ему как то фиалетово. Ну по крайней мере в Юнити/Анрилах так И никто там движок не пересобирает.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Сообщить модератору | IP: Записан
Сообщение: 223865

Старое сообщение 16-03-2025 13:35
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32961
Нанёс повреждений: 392 ед.

Рейтинг



Цитата:
FiEctro писал:
Движок работает с треугольниками и текстурными координатами, а что там за форматы ему как то фиалетово

В таком случае напиши простенькую программку, которая в цикле рендерит треугольники - вот тебе и готов движок

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 223866

Старое сообщение 17-03-2025 06:44
-
FiEctro
Кот Арсис

Дата регистрации: Aug 2006
Проживает: код
Сообщений: 13483
Возраст: 33

Рейтинг



Цитата:
Дядя Миша писал:
В таком случае напиши простенькую программку, которая в цикле рендерит треугольники - вот тебе и готов движок


Так вон в хл1 же триапи был, насколько я помню им так же можно было рисовать что угодно (в рамках лимитов триапи и халфы конечно же). Не удивлюсь если там можно будет даже ему геометрию из какого нибудь .obj или .fbx скормить. Ещё я помню Сразу Рашен прикручивал .tga текстуры к клиенту халфы.

Вот в новом Ксаше тоже чего такого не хватает. В Юнити например есть мешрендер и физик меш, которые принимают на входе теже треугольники (откуда угодно, хоть из файла, хоть проценурные), и можно ими рисовать в движке всё что захочешь. Тоже самое и с текстурой. Создаешь вызов процедурной текстуры и заполняешь её пикселями процедурно или из файла, хранишь в памяти и рисуешь где угодно. Но это ты уже вроде как реализовал.

Этих инструментов уже с головой хватит чтобы при наличии пользовательского самописного загрузчика при загрузке карты сгенерировать геометрию, колизию и текстуры из форматов которые изначально не поддерживались.

__________________
У котёнка мокрый нос и гладенькая шерсть, у него забавный хвост и быстрых лапок шесть. Две задних, две средних и две передних лапы, такая многоножка получилася у папы.
Он ученый — папа мой — зверушек изучает, гуляет по помойкам, ловит крыс и чаек. Две крысы белокрылые и чайки две унылые покрытые пупырчатою кожей лягушат без пёрышек тоскуют и ускакать спешат.
А ещё есть муравей большой размером с гуся он пугает всех зверей, и я его боюся, когда он ковыляет на лапках на своих.
И в двери ударяет, и начинает стих: Я — муравей, воды налей! Не меньше ведра, напиться мне пора!

Отредактировано FiEctro 17-03-2025 в 09:06

Сообщить модератору | IP: Записан
Сообщение: 223869

Старое сообщение 17-03-2025 08:54
- За что?
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32961
Нанёс повреждений: 392 ед.

Рейтинг



Да проще неподдерживаемый формат переконвертировать в поддерживаемый

Подведём промежуточные итоги. Параметры клип-плейнов я вывел в систему материалов, однако gl_ClipDistance доступен начиная лишь с версии GLSL 130, поэтому само уравнение плоскости я пока не прописывал. От загрузки матриц тоже полностью избавился. Все программы на Шоте переписаны с учётом изменившегося API, все материалы обновлены, устаревшие шрифты сконвертированы или сгенерированы заново, все шейдеры тоже обновлены с учётом использования новых юниформов (но пока что остаются в рамках версии 120). Сделана масштабная ревизия функций OpenGL, подтянуты те, которые используются в Core Profile. То есть в сущности сделана вся работа, кроме переписывания шейдеров на новую версию. Но я решил это оставить на самый последок, а вместо этого пройтись дальше по документу, хотя полагаю что там уже не будет ничего такого масштабного, по сравнению с тем, что я уже сделал и это заняло более двух недель. Ну посмотрим.

Добавлено 17-03-2025 в 15:44:

Поехали:

Цитата:
Separate polygon draw mode - PolygonMode face values of FRONT and BACK; polygons are always drawn in the same mode, no matter which face is being rasterized.

Проверил - действительно. Похоже эта штука просто перестала работать.
Ну ладно, фиг с ней. Она в основном нужна, чтобы сменить GL_FILL на GL_LINE. А эта опция прекрасно работает.

Цитата:
Polygon Stipple - PolygonStipple and Enable/Disable target POLYGON_-STIPPLE, and all associated state.

Не юзал и не юзаю.

Цитата:
Pixel transfer modes and operations - all pixel transfer modes, including pixel maps, shift and bias, color table lookup, color matrix, and convolution commands and state, and all associated state and commands defining that state.

Не юзал. Это что-то из времён OpenGL 1.0

Цитата:
Pixel drawing -DrawPixels and PixelZoom. However, the language describing pixel rectangles in section 3.7 is retained as it is required for TexImage* andReadPixels

Не юзал.

Цитата:
Bitmaps -Bitmap and the BITMAP external format

Даже не знал что OpenGL в такое умел.

Цитата:
Legacy OpenGL 1.0 pixel formats - the values 1, 2, 3, and 4 are no longer accepted as internal formats by TexImage* or any other command taking an internal format argument. The initial internal format of a texel array isRGBA instead of 1.TEXTURE_COMPONENTS is deprecated; always use TEXTURE_INTERNAL_FORMAT.

Не юзал, но рискну предположить - это было влияние Кармака. Аналогично и с номерами активных текстур для мультитекстурирования.
Там тоже можно было просто циферки задавать от ноля.

Цитата:
Legacy pixel formats - all ALPHA, LUMINANCE, LUMINANCE_ALPHA, and INTENSITY external and internal formats, including compressed, floating-point, and integer variants; all references to luminance and intensity formats elsewhere in the specification, including conversion to and from those formats; and all associated state. including state describing the allocation or format of luminance and intensity texture or framebuffer components

Вот этого вот вообще не понял. А что плохого в таких форматах?
У меня загрузчик текстур по возможности сохраняет в эти форматы просто ради экономии видеопамяти. Ну если уж текстура чёрнобелая, зачем её хранить в RGBA? То-то и оно, что незачем.

Цитата:
Depth texture mode - DEPTH_TEXTURE_MODE. Section 3.8.16 is to be changed so that r is returned to texture samplers directly, and the OpenGLShading Language 1.30 Specification is to be changed so that(r,r,r,1) is always returned from depth texture samplers in this case.

Это напрямую относится к предидущему кейсу. Т.к. DEPTH_TEXTURE_MODE мог быть либо LUMINANCE либо INTENSITY. Мне-то в целом пофиг, т.к. я не понял зачем эти режимы вообще нужны. Ну видимо и правда незачем, раз выбросили.

Добавлено 17-03-2025 в 17:35:

Продолжим. Переделал все текстурные форматы с GL_LUMINANCE и GL_LUMINANCE_ALPHA на GL_R и GL_RG соответственно. Потребовалось скопировать альфу в зелёный канал и настроить свиззлинг естественно.
Опять же то что раньше было в драйвере теперь вручную делается.

Цитата:
Texture wrap mode CLAMP - CLAMP is no longer accepted as a value of texture parameters TEXTURE_WRAP_S, TEXTURE_WRAP_T, or TEXTURE_ - WRAP_R.

Ну тут понятно. Старый GL_CLAMP выбросили, а GL_CLAMP_TO_EDGE, который ранее был доступен в качестве расширения теперь вошёл в ядро и должен использоваться по умолчанию вместо GL_CLAMP.

Добавлено 17-03-2025 в 17:48:

Цитата:
Texture borders - the border value to TexImage* must always be zero, or an INVALID_VALUE error is generated (section 3.8.3); all language in section 3.8 referring to nonzero border widths during texture image specification and texture sampling; and all associated state.

Ну тут аналогично, GL_CLAMP_TO_BORDER теперь в ядре, правда смутил тот факт, что бордюр должен быть непременно заполнен нулевыми значениями.
Спрашивается, тогда зачем вообще передавать переменную? Впрочем, насколько я помню, эти бордюры мне были нужны только для того, чтобы сделать "фонарик из паранои" на фиксированном конвейере, а так-то они больше ни для чего были не нужны. Так что некритично. Занулил бордюр, да и всё.

Цитата:
Automatic mipmap generation -TexParameter* target GENERATE_-MIPMAP, and all associated state.

Эту фичу я выбросил из нового ксаша ещё в 2019-м. Теперь всё только вручную.

Цитата:
Fixed-function fragment processing -AreTexturesResident, PrioritizeTextures, and TexParameter target TEXTURE_PRIORITY; TexEnv target TEXTURE_ENV, and all associated parameters; TexEnv target TEXTURE_-FILTER_CONTROL, and parameter name TEXTURE_LOD_BIAS; Enable targets of all dimensionalities (TEXTURE_1D, TEXTURE_2D, TEXTURE_3D, TEXTURE_1D_ARRAY, TEXTURE_2D_ARRAY, and TEXTURE_CUBE_MAP); Enable target COLOR_SUM; Enable target FOG, Fog, and all associated parameters; the implementation-dependent values MAX_TEXTURE_UNITS and MAX_TEXTURE_COORDS; and all associated state.

Выброшено. Осталось выбросить lodbias. Ну да дело нехитрое.

Добавлено 17-03-2025 в 18:00:

Цитата:
Alpha test -AlphaFunc and Enable/Disable target ALPHA_TEST, and allassociated state.

Вот это вот единственный случай, когда на свой страх и риск выбрасывать не буду. Я привык к альфа-тесту, он очень удобный, постараюсь этот функционал сохранить. Посмотрим что из этого получится. Там дело в том, что он у меня привязан к условиям в материале, чего не получится сделать другим способом. Не то чтобы это было прямо так уж принципиально, но с другой стороны я не видел ситуации чтобы альфа-тест где-то не работал.
Хотя это возможно потому что я ещё не переключался в кор-профиль или не переходил на версию шейдеров 1.3? Увидим. Пока что я проигнорирую это.

Цитата:
Accumulation buffers -ClearAccum, and ACCUM_BUFFER_BIT is not valid as a bit in the argument to Clear(section 4.2.3); Accum; the ACCUM_*_-BITS framebuffer state describing the size of accumulation buffer components; and all associated state. Window system-binding APIs such as GLX and WGL may choose to either not expose window configs containing accumulation buffers, or to ignore accumulation buffers when the default framebuffer bound to a GL context contains them.

Аккумуляторы я никогда и не юзал. Но BUzer в параное помнится делал на них моушен блюр вроде как. Ну сейчас это на шейдерах делается.

Цитата:
Pixel copying -CopyPixels (the comments also applying to CopyTexImage will be moved to section 3.8.4).

Не юзал.

Цитата:
Auxiliary color buffers, including AUXi targets of the default framebuffer.

Не юзал.

Цитата:
Context framebuffer size queries -RED_BITS, GREEN_BITS, BLUE_BITS, ALPHA_BITS, DEPTH_BITS, and STENCIL_BITS.

Не юзал.

Цитата:
Evaluators -Map*, EvalCoord*, MapGrid*, EvalMesh*, EvalPoint*, and all evaluator map enables, and all associated state.

Не юзал.

Добавлено 17-03-2025 в 18:13:

Цитата:
Selection and feedback modes -RenderMode, InitNames, PopName, PushName, LoadName, and SelectBuffer; FeedbackBuffer and PassThrough; and all associated state.

Не юзал и не знаю зачем оно нужно.

Цитата:
Display lists -NewList, EndList, CallList, CallLists, ListBase, GenLists, IsList, and DeleteLists; all references to display lists and behavior when compiling commands into display lists else where in the specification; and all associated state.

Не юзал, но когда-то очень давно мне BUzer про них рассказывал, что они ну прямо ппц какие быстрые, то есть быстрее всего. В любом случае это уже устарело.

Цитата:
Hints - the PERSPECTIVE_CORRECTION_HINT, POINT_SMOOTH_HINT, FOG_HINT, and GENERATE_MIPMAP_HINT targets to Hint(section 5.4).

Я юзаю только GL_LINE_SMOOTH_HINT, но его в этом списке нет.

Цитата:
Attribute stacks -PushAttrib, PushClientAttrib, PopAttrib, Pop- ClientAttrib, the MAX_ATTRIB_STACK_DEPTH, MAX_CLIENT_ATTRIB_-STACK_DEPTH, ATTRIB_STACK_DEPTH, and CLIENT_ATTRIB_STACK_-DEPTH state, the client and server attribute stacks, and the values ALL_-ATTRIB_BITS and CLIENT_ALL_ATTRIB_BITS.

В старом ксаше ещё немного юзал, в новом уже нет.

Добавлено 17-03-2025 в 18:19:

Цитата:
Token names and queries - all token names and queries not otherwise mentioned above for deprecated state, as well as all query entry points where all valid targets of that query are deprecated state (chapter 6 and the state tables)

Надеюсь мне debug output выдаст те места, которые больше использовать нельзя, хотя, следуя документу я вроде бы и так от них избавился. Ну а если нет - пусть драйвер ругается.

Цитата:
Unified extension string -EXTENSIONS target to GetString

Вот тут вообще не понял. Очевидно, что старая строка расширений больше неактуальна. Но что юзать вместо неё в этом разделе документа не сообщается. После всех изменений расширений, которые юзает Ксаш осталось мало совсем - ну может штук семь от силы. Из которых два расширения - это поддержка бинарных шейдеров (кэш) и пресловутый debug output. А остальные не требуют никаких функций, ну всякие там анизотропные фильтрации и бесшовные кубемапы, типа такого.

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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 223870

Старое сообщение 17-03-2025 15:19
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32961
Нанёс повреждений: 392 ед.

Рейтинг



С проверкой расширений разобрался, оказывается теперь есть glGetStringi которая возвращает расширения по одному. И проверять их теперь надо именно так. Так же сконвертировал на пробу парочку шейдеров - всё работает. Теперь список задач следующий:

1. перевести все шейдеры на версию языка 140
2. посмотреть, возможно добавить какие-то встроенные макросы в движок, чтобы они автоматически эмитились в исходные тексты шейдеров. Хотя я и противник этого, но посмотрю.
3. собственно сделать то, ради чего всё и затевалось - включить в wglCreateContext соответствующую версию Core Profile.
4. обновить reqtest с учётом сделанных изменений

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 223885

Старое сообщение 18-03-2025 06:40
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32961
Нанёс повреждений: 392 ед.

Рейтинг



Для пробы перевёл все шейдеры, относящиеся к Half-Life и ксаш-моду на новую версию GLSL 140, включил заветный Core Profile, по факту включения вычистил ещё несколько разных ошибок, в основном выбросил ненужное, код стал проще и чище. Но увы - фпс никак не поменялся, всё осталось по прежнему. Но Core Profile - ЗАРАБОТАЛ. Впрочем напоминаю, что это не самоцель, а всего лишь средство огородиться от проблем несовместимости на зоопарке пользовательского железа. Достиг я этой цели или хотя бы упростил себе задачу в её достижении - покажет время и предстоящий бета-тест. Ну а на данный момент мне осталось выполнить ещё две задачи:

1. обновить reqtest с учётом сделанных изменений и выложить его народу на первичное тестирование, чтобы получить предварительную обратную связь
2. перевести оставшиеся шейдеры на GLSL 140.

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

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 223890

Старое сообщение 18-03-2025 15:43
-
 Дядя Миша
racing for fish

Дата регистрации: Oct 2005
Проживает: Кубань
Сообщений: 32961
Нанёс повреждений: 392 ед.

Рейтинг



Можете меня поздравить! Переход на Gl Core Profile успешно завершён!
По времени это заняло 18 дней. Конечно же есть у нас товарищи, что пишут браузеры за одну ночь, но увы - мне за ними не угнаться

Так что скоро будет масштабное обновление, список оставшихся задач:

1. завершить рефакторинг движка, поскольку Core Profile очень многое затронуло и теперь можно без опаски выбросить остатки легаси.

2. Обновить документацию с учётом всех изменений

3. Дождаться обновлённой версии Джека с одним маленьким но очень важным багфиксом

4. Собственно выход очередной бета-версии

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'

Сообщить модератору | IP: Записан
Сообщение: 223910

Старое сообщение вчера 10:52
-
Тема: (Опционально)
Ваш ответ:



Переводчик транслита


[проверить длину сообщения]
Опции: Автоматическое формирование ссылок: автоматически добавлять [url] и [/url] вокруг интернет адресов.
Уведомление по E-Mail: отправить вам уведомление, если кто-то ответил в тему (только для зарегистрированных пользователей).
Отключить смайлики в сообщении: не преобразовывать текстовые смайлики в картинки.
Показать подпись: добавить вашу подпись в конец сообщения (только зарегистрированные пользователи могут иметь подписи).

Временная зона GMT. Текущее время 07:10. Новая тема    Ответить
Страницы (32): « Первая ... « 28 29 30 31 [32]   Предыдущая тема   Следующая тема
HLFX.Ru Forum HLFX.Ru Forum > Разработка игр > Наши проекты > XashNT: блог разработчика
Часть II
Версия для печати | Отправить тему по E-Mail | Подписаться на эту тему

Быстрый переход:
Оцените эту тему:

Правила Форума:
Вы not можете создавать новые темы
Вы not можете отвечать в темы
Вы not можете прикреплять вложения
Вы not можете редактировать ваши сообщения
HTML Код ВЫКЛ
vB Код ВКЛ
Смайлики ВКЛ
[IMG] Код ВКЛ
 

< Обратная связь - HLFX.ru >

На основе vBulletin
Авторское право © 2000 - 2002, Jelsoft Enterprises Limited.
Дизайн и программирование: Crystice Softworks © 2005 - 2024