Пятница, 19 Апреля 2024, 01:41

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Программирование » C/C++ » Исправьте пожалуйста код для Загрузки шейдеров (Исправьте пожалуйста код для DirectX)
Исправьте пожалуйста код для Загрузки шейдеров
MorglodДата: Суббота, 02 Апреля 2011, 13:54 | Сообщение # 1
Вечно пилящий двиг
Сейчас нет на сайте
вот вобщем проблема такая, вот код функции загрузки шейдера

вот сам шейдер (который в фале vertexShader.vsh) именно его и загружает прога с помощью функции выше

прабл в том что прога выдает ошибку "123" которая написана в функции

хелп cry

Добавлено (02.04.2011, 13:54)
---------------------------------------------
или его надо компилировать? (в проге)


вначале был #include

PesetsДата: Суббота, 02 Апреля 2011, 15:55 | Сообщение # 2
постоянный участник
Сейчас нет на сайте
хм... а переменная Shaders - это у тебя что такое?
Quote
//проверка ошибки
if(!Shaders[Shaders_loaded].vertexShader)

Предположительно, здесь надо писать Shaders[Shaders_loaded - 1], если Shaders_loaded - это количество загруженных шейдеров.



MorglodДата: Суббота, 02 Апреля 2011, 16:46 | Сообщение # 3
Вечно пилящий двиг
Сейчас нет на сайте
int Shaders_loaded = 0; //по умолчанию

class Shader
{
public:
IDirect3DVertexShader9 *vertexShader;
IDirect3DPixelShader9 *pixelShader;
IDirect3DVertexDeclaration9 *decl;
};

Добавлено (02.04.2011, 16:46)
---------------------------------------------
вот как класс инициализирован

Shader Shaders[50];


вначале был #include

PesetsДата: Суббота, 02 Апреля 2011, 17:31 | Сообщение # 4
постоянный участник
Сейчас нет на сайте
если я правильно понял, код такой:
Code

class Shader{ //ну, далее то, что ты написал
};

Shader Shaders[50]; //находится в статической памяти

int LoadVertexShader(...)  
{  
//проверка ошибки  
if(!Shaders[Shaders_loaded].vertexShader)  
{  
MessageBox(NULL, L"123", L"ERROR", NULL);  
return E_FAIL;  
}

....

Тогда при первом вызове функции условие

Code
!Shaders[0].vertexShader

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



MorglodДата: Суббота, 02 Апреля 2011, 18:23 | Сообщение # 5
Вечно пилящий двиг
Сейчас нет на сайте
ааа, тоесть надо убрать эту фигню?

Добавлено (02.04.2011, 18:21)
---------------------------------------------
если это убрать то вылезает ошибка в трансляции шейдера (которая в функции написана ) ... cry

Добавлено (02.04.2011, 18:23)
---------------------------------------------
ааа, google мне подсказывает что нужно шейдер откомпилировать... http://www.two-kings.de/tutorials/dxgraphics/dxgraphics18.html
попробую, отпишусь


вначале был #include

PesetsДата: Суббота, 02 Апреля 2011, 18:57 | Сообщение # 6
постоянный участник
Сейчас нет на сайте
Так, это уже следующая проблема)
Я не очень хорошо знаком с DX API (предпочитаю более высокоуровневые библиотеки), поэтому сказать точно, упустил ты что-то или нет, я не могу.
Советую в D3DXAssembleShaderFromFile передать в последний параметр какой-нибудь буффер и посмотреть, что он в него напишет.
Да, и
Code
VS_OUTPUT vs_main( in VS_INPUT In )

Вот это строчка мне не нравится... Опять же, я не мастак в hlsl, но разве объявление переменных там не "Си-стайл"?



MorglodДата: Суббота, 02 Апреля 2011, 19:24 | Сообщение # 7
Вечно пилящий двиг
Сейчас нет на сайте
Вобщем вместо AssebleShader переписал как в статье (которую я выше выложил)

вот вызов:

теперь выдает ошибку Invalid pixel shader code, а если pixel shader не использовать то получается черный экран)

Добавлено (02.04.2011, 19:24)
---------------------------------------------
а, нет не черный экран, видно только объект без шейдеров


вначале был #include

PesetsДата: Суббота, 02 Апреля 2011, 19:43 | Сообщение # 8
постоянный участник
Сейчас нет на сайте
Quote (Pesets)
Советую в D3DXAssembleShaderFromFile передать в последний параметр какой-нибудь буффер и посмотреть, что он в него напишет.

Ну, в данном случае в D3DXCompileShaderFromFile, но все равно советую)
Quote (Morglod)
Invalid pixel shader code

Код в студию.
Quote (Morglod)
видно только объект без шейдеров

Уверен?

Добавлено (02.04.2011, 19:43)
---------------------------------------------
Кстати да, доверять статьям в интернетах я не советую, ибо пишутся они черти-кем и черти-как. Лучше купи книжку или читай msdn.



MorglodДата: Суббота, 02 Апреля 2011, 20:06 | Сообщение # 9
Вечно пилящий двиг
Сейчас нет на сайте

с буффуром морока будет, у меня все через ж*пу сделано ... biggrin


вначале был #include

PesetsДата: Суббота, 02 Апреля 2011, 20:35 | Сообщение # 10
постоянный участник
Сейчас нет на сайте
Проблема в том, что я не писал шейдеров уже года полтора, соответственно, нужного инструментария на машине нет, а навскидку ничего в голову не приходит. С виду, код нормальный... вроде
Тем более, я никогда не пользовался низкоуровневыми функциями для загрузки шейдеров, я грузил сразу .fx файл. Там проще.
Quote (Morglod)
с буффуром морока будет, у меня все через ж*пу сделано ...

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

Хм, да, попробуй еще версию шейдеров 2.0 выставить, мб поможет, мало ли)



MorglodДата: Суббота, 02 Апреля 2011, 20:57 | Сообщение # 11
Вечно пилящий двиг
Сейчас нет на сайте
Quote (Pesets)
попробуй еще версию шейдеров 2.0 выставить

ха! работает... только я не знаю что шейдер должен делать, но в результате все желтоватого оттенка... biggrin

Добавлено (02.04.2011, 20:57)
---------------------------------------------
еще материалы отключились(или свет) теней нету... dry


вначале был #include

Форум игроделов » Программирование » C/C++ » Исправьте пожалуйста код для Загрузки шейдеров (Исправьте пожалуйста код для DirectX)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг