ошибка C2146 при попытке скомпилировать базовый шейдер HLSL в переполнении стека

я только начал изучать основы HLSL с использованием C ++, я следую учебным пособиям в книге, первый базовый шейдер:

float4 VS_Main( float4 pos:POSITION):SV_POSITION
{

return pos;
}

но я получаю много ошибок во время компиляции:

ошибка C2146: синтаксическая ошибка: ‘;’ отсутствует перед идентификатором VS_Main

ошибка C4430: отсутствует указатель типа, предполагается int. Примечание: default-int больше не поддерживается

ошибка C2146: синтаксическая ошибка: ‘)’ отсутствует перед идентификатором ‘pos’

ошибка C2059: синтаксис ошибка выглядит как определение функции, но нет списка формальных параметров.

ошибка C2059: синтаксическая ошибка: ‘{‘

это действительно похоже на то, что компилятор не может обрабатывать HLSL вообще … может быть, VS2012 Express не поддерживает HLSL?

заранее спасибо

0

Решение

это действительно похоже на то, что компилятор не может обрабатывать HLSL вообще … может быть, VS2012 Express не поддерживает HLSL?

Ни один компилятор C ++ не делает. Он не должен обрабатываться компилятором.

Вам нужно превратить его в ресурс и скопировать в каталог bin с помощью сценариев после сборки и загрузить HLSL во время выполнения.

Смотрите также: http://www.directxtutorial.com/Lesson.aspx?lessonid=11-4-5

0

Другие решения

HLSL не является C ++. Вы должны компилировать шейдеры с помощью компилятора шейдеров, а C ++ — с помощью компилятора C ++ — не смешивайте. Есть два варианта компиляции HLSL.

  1. Используйте утилиту командной строки fxc.exe который включен в DirectX SDK (документы и использование здесь, в MSDN). Он генерирует файл, который вы должны загрузить во время выполнения некоторыми из описанных способов Вот.
  2. Скомпилируйте ваш шейдер во время выполнения, используя D3DCompileFromFile функция.

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

1

Код выглядит нормально для HLSL. Если вы хотите скомпилировать его из VS2012, установите файл «.fx» для сборки с помощью шейдерного компилятора HLSL. Щелкните правой кнопкой мыши файл, выберите свойства. Затем выберите General и Item Type должен быть установлен на HLSL компилятор.

Если вы действительно хотите создавать шейдеры с использованием C ++, вы можете заглянуть в C ++ AMP, чтобы узнать, подходит ли он вам.

1
По вопросам рекламы [email protected]