Потому что иногда такой код может вылететь, так как будут обращения к библиотеке opengl. Даже на d3d может вылететь. Поэтому самое правильное это проверка -
if(!IEngineStudio.IsHardware())
return 0;
И после сделать туман через pTriApi. Тогда полётов точно не будет.
Поэтому самое правильное это проверка -
if(!IEngineStudio.IsHardware())
return 0;
Неправильная это проверка. Hardware еще не указывает явно рендерим мы в d3d или в gl.
вот так проверять надо
code:
//Check video mode
if (glGetString(GL_RENDERER))
{
}
Добавлено 25-10-2007 в 15:20:
Troll туман для триапи один чорт не работает в d3d, к тому же в гл можно настроить больше опций, по сравнению с триапи.
А вообще - лучше всего табличный туман
Правильная это проверка!
Туман через ТриАпи не будут работать в d3d но и не будет летать как в случае с просто вызовом gl функций.
А вообще лучше сделать булевое разделение и сделать разделение d3d/gl, рендерить туман и прочие фишки поотдельности для каждого рендера.
glGetString - работает только в опенгл.
Troll вообще-то d3d render в халфе нет.
есть FakeGL клиент, преобразующий ogl запросы в d3d команды.
И проверка это неправильная в данном случае, я уже объяснил почему.
Ну раз не будет на том режиме работать так зачем проверять? Тогода ведь игрок может и не заметить наш туман не влючив опегл и тогда все старания с туманом будут равны 0. Или отключить намеренно, пройдя игру слишком просто.
Я видал кучу обзоров на сити 17 где Иоанн часто говорил о том что замечал туман только когда проходил моды на третий раз влючив опегл.
Но тут уже личные требвания программиста, о вскусах не спорят Кто-то гонится за размером диллок, кто то за скоростью выполнения, кто-то за серх графикой, кто-то за физикой... Каждый вибирает то что ему нравится, на пример лично для одного меня больше нравится без проверок , вылет на совт варе для меня лучше чем невидимыйтуман.
Добавлено 25-10-2007 в 18:25:
Дядя Миша Спасибо за проверку -учту в туторе.
__________________
Хотелось бы, чтобы не только хотелось...
XaeroX писал: Цитата:
Дядя Миша писал:
вообще-то d3d render в халфе нет.
есть FakeGL клиент, преобразующий ogl запросы в d3d команды.
да есть он там, есть
никто там огл запросы не преобразует, что ты за ерунду пишешь
Во-во, у меня аж вот так произошло
Цитата:
Дядя Миша писал: Неправильная это проверка. Hardware еще не указывает явно рендерим мы в d3d или в gl.
вот так проверять надо
code:
//Check video mode
if (glGetString(GL_RENDERER))
{
}
Это у тебя она совершенно неправильная. Читай прошлую страницу - мы сначала проверяем на то что этот код будет исполнятся хотябы в одном из трёх рендеров.
Он правилен у тебя лишь тем что он просто невыполнится, так как не эта "gl" ненайдётся, об этом чуть ниже.
if(!IEngineStudio.IsHardware())
return 0;
Если true то мы разумеется исполняем код дальше и у нас остаётся только два рендера + плюс движок не делает лишнюю работу. Дальше почему я говорил использовать
oEngfuncs.pTriAPI->Fog(fogColor,fStart,fEnd,1);
Поскольку если протрейсить этот< туман то можно увидеть что в d3d он возвращает ноль (невыполняется функция).
Вызывая любую gl функцию на d3d мы получим либо крах либо ничего не получим, поскольку библиотека даже и не находится в процессе HL.
Вообще как я делаю -
Есть два буля
static bool d3d = true;
static bool opengl = false;
Если в модуле HL я обнаруживаю модуль opengl32.dll, то следовательно я выставляю их наоборот.
Далее пример функции -
void DrawGlFog();
void DrawD3dFog();
if(opengl)
DrawFog();
else if(d3d)
DrawD3dFog();
Что-то такого рода. Да и если мне говорится что EngStudio.IsHardware == false, я просто кидаю юзеру мессаджбокс: мол, переставь режим детка
Короче говоря это я спросоня писал, опять таки забыл про то что у меня в этой области занятий иная специализация, вот вам и кричал яросто про то что неправильно. У меня и летают все gl
А так в вашем случае - да пожалуйста можно и так.
Цитата:
XaeroX писал: А как ты рисуешь D3D Fog? Вроде как нельзя получить доступ к халфовским СОМ-интерфейсам типа IDirect3DDevice7 и т.п.?