Исправил, перезалил.
Благодарю )
Есть предложение добавить в порт битовые сдвиги...
Вот можеш добавить функции получения версии шейдеров:
Function D3DSHADER_VERSION_MAJOR(Version As Long) As Long
D3DSHADER_VERSION_MAJOR = (((Version And &H1000FF00) - &H10000000) / &HFF)
End Function
Function D3DSHADER_VERSION_MINOR(Version As Long) As Long
D3DSHADER_VERSION_MINOR = (Version And &HFF)
End Functionmax255
> Есть предложение добавить в порт битовые сдвиги...
В смысле? Сделать функции?
С учётом затрат времени на вызов DLL, я думаю умножение и целочисленное деление будут быстрее.
Mikle
Можно как нибудь переделать stop при ошибке загрузке шейдера?
Например Msgbox "Direct3DDevice.CreateShader....",, "Direct3D9" затем end?
max255
У меня там Stop... :) забыл убрать со времён отладки, переделаю.
Обновил компилятор шейдеров...
Теперь есть рабочие области. Загрузка и сохранение их в файл.
Компилятор шейдеров: Shader compiler v2.1
max255
> Обновил компилятор шейдеров
Солидно выглядит. Только лучше сделать, чтобы при открытии (или создании) нового файла вкладка создавалась автоматически.
А сочетания Shift-Ins и Shift-Del задействовать нежелательно. Во ВСЕХ текстовых редакторах у них функции "вставить" и "вырезать", а у Ctrl-Ins - "скопировать". Эти сочетания, наряду с Ctrl-C, Ctrl-V и Ctrl-P поддерживаются даже текстбоксом и остальными контролами с функцией редактирования.
И кнопки "Открыть файл" и "Закрыть файл" (и пункт меню тоже) были бы уже полезны.
Mikle
>Только лучше сделать, чтобы при открытии (или создании) нового файла вкладка создавалась автоматически.
Т.Е. одна вкладка - один файл, переоткрыть в ней ничего не получится...
>А сочетания Shift-Ins и Shift-Del
Исправлю...
>И кнопки "Открыть файл" и "Закрыть файл" (и пункт меню тоже) были бы уже полезны.
Тут подробней...
max255
> Тут подробней...
В меню есть пункт "Открыть файл", аналогичная кнопка между "New" и "Save" пошла бы на пользу.
А как закрыть? Сейчас ты с помощью Shift-Del закрываешь вкладку, но нужно как-то стандартнее. Как? Например как в эксплорере каждая вкладка имеет кнопку закрыть. Если контрол, с помощью которого ты делаешь вкладки такое не позволяет, можно сделать пункт меню "Закрыть файл" и соответствующую кнопку на панели. А может стоило вместо вкладок применить обычные MDI формы - тут и кнопки все, какие хочешь, и можно сразу несколько окон держать открытыми.
Mikle
> В меню есть пункт "Открыть файл", аналогичная кнопка между "New" и "Save" пошла
> бы на пользу.
Понял...
>обычные модальные окна
Ну это уже выводит проект на другой уровень...Неудобство в размере рабочего стола... Вряд ли я на своем монике открою больше одного окна...
Еще думаю встроить туда помощь(справку о командах асма) где то вот так: Сервис->Вставка->Команда
Обновил компилятор...
- убрал сочитания клавиш
- убрал добавление вкладок вручную
- убрал автоматическое открытие "пустого" шейдера
+ добавил автоматические вкладки
+ добавил клонирование вкладок
+ добавил удаление рабочей области
+ добавил кнопки "открыть", "закрыть"
+ добавил включение\выключение кнопок
Компилятор шейдеров: Shader compiler v2.1
Нашел у себя баг...
При сохранении рабочей области в файл пишется путь к файлу шейдера... Если переместить папку на другой комп или в другое место, то компиллер начинает ругаться, что нет шейдера... Как тут можно обойти эту ситуацию? Или эт не важно?
max255
Не важно. Только имеет смысл при сохранении на том же диске, где сама программа, использовать относительный путь, тогда папку с программой и всеми её данными можно будет безболезненно переносить куда угодно.
Mikle
Уже неделю мучает BSOD при отладке двига...
Выяснил что он возникает из-за TestAlpha в MXSprite на текстуре с флагами: D3DUSAGE_NONE, D3DPOOL_MANAGED
Вот код TestAlpha:
'-----------------------------------------------------------------------------
'Проверяет альфу в точке
'-----------------------------------------------------------------------------
Private Function TestAlpha(ByVal x As Long, ByVal y As Long) As Boolean
Dim s_data As Long
'получим данные
g_tex.GetTexture(s_id).GetSurfaceLevel(0).GetPixel x, y, 4, ByVal VarPtr(s_data)
'проверим данные на присутствие альфы
If s_data And &HFF000000 Then
TestAlpha = True
Else
TestAlpha = False
End If
End FunctionТак и должно быть?
Тема в архиве.