Программирование игр, создание игрового движка, OpenGL, DirectX, физика, форум
GameDev.ru / Программирование / Форум / Я не понимаю что происходит: камера на углах Эйлера (6 стр)

Я не понимаю что происходит: камера на углах Эйлера (6 стр)

Страницы: 1 2 3 4 5 6 7 Следующая »
IBetsПользовательwww12 июня 201820:38#75
Delfigamer
Есть еще одна смотри пост "Артефакт". Либо это грехи упаковки нормалей, то ли я накосячил
Great V.Постоялецwww12 июня 201821:11#76
Delfigamer
> Закончились аргументы?
А что мне еще сказать?
Серьезный код намного легче писать в IDE, а несерьезный не несет в себе такой сложности, что auto может его сломать.
Как так вышло что тебе в блокноте удобно - я не знаю, не понимаю.

> Тоже пусть катятся лесом? Пускай на каждый сниппет ставят себе студию,
> скачивают весь гит и генерируют файлы проекта?
А ты перед сном вместо книжки читаешь гитхаб?
Тоже какой-то сомнительный вариант. Какой прикол просто читать код на гитхабе?
Даже если и так, то для поверхностного ознакомления сойдет, вряд ли auto большую погоду сделает.
А для глубокого изучения нужен IDE.

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

Правка: 12 июня 2018 21:11

DelfigamerПостоялецwww12 июня 201823:37#77
Great V.
> Как так вышло что тебе в блокноте удобно - я не знаю, не понимаю.
Для однофайловых поделок - студия слишком тормозная, мне проще набрать код и вызвать гцц через командную строку, чем ждать, пока студия прогрузится и пропердится.
Для того серьёзного проекта, что у меня есть - там своя собственная билд-система, на подобие которой студию я натаскивал очень давно, это было несколько геморно, получилось всё равно нехорошо, и под текущую версию кодогенерации переделывать нет ни желания, ни острой необходимости.
DelfigamerПостоялецwww14 июня 20182:41#78
Zab
Ну так где ляп, умник?
DelfigamerПостоялецwww25 июня 201815:10#79
Поскольку Zab ни на что, кроме как трепать клавиатурой, оказался не способен, объясняю ошибку.
Сначала, контекст:
DWORD WINAPI GetFullPathName(
  _In_  LPCTSTR lpFileName,
  _In_  DWORD   nBufferLength,
  _Out_ LPTSTR  lpBuffer,
  _Out_ LPTSTR  *lpFilePart
);

#define PATH_START_W L".."
#define PATH_UNC_PREFIX L"\\\\?\\"
struct DataBuffer: RefObject
{
    size_t m_length;
    size_t m_capacity;
    char m_data[1]; // VLA
    static Ref< DataBuffer > create( size_t length, size_t capacity, char const* source );
};
Вот так выглядит код с ошибкой:
    int cwdlength = GetFullPathNameW( PATH_START_W, 0, 0, 0 );
    Ref< DataBuffer > db = DataBuffer::create( 0, cwdlength * 2 + 8, 0 );
    uint8_t* data = db->m_data;
    memcpy( data, PATH_UNC_PREFIX, 8 );
    cwdlength = GetFullPathNameW( PATH_START_W, cwdlength + 1, LPWSTR( data + 8 ), 0 );
Вот так выглядит правильный код:
    int cwdlength = GetFullPathNameW( PATH_START_W, 0, 0, 0 );
    Ref< DataBuffer > db = DataBuffer::create( 0, cwdlength * 2 + 10, 0 );
    uint8_t* data = db->m_data;
    memcpy( data, PATH_UNC_PREFIX, 8 );
    cwdlength = GetFullPathNameW( PATH_START_W, cwdlength + 1, LPWSTR( data + 8 ), 0 );
В чём подвох? Читаем внимательно документацию:
Return value
If the function succeeds, the return value is the length, in TCHARs, of the string copied to lpBuffer, not including the terminating null character.
If the lpBuffer buffer is too small to contain the path, the return value is the size, in TCHARs, of the buffer that is required to hold the path and the terminating null character.
If the function fails for any other reason, the return value is zero. To get extended error information, call GetLastError.

Видите подвох? А он есть. На самом деле, функция ведёт себя так:
Return value
If the function succeeds, the return value is the length, in TCHARs, of the string copied to lpBuffer, not including the terminating null character.
If the lpBuffer buffer is too small to contain the path, the return value is the size, in TCHARs, of the buffer that is required to hold the path, not including the terminating null character.
If the function fails for any other reason, the return value is zero. To get extended error information, call GetLastError.

Прям вообще детская ошибка, ага. Заб такие в пятом классе ловил, ага.
Ну реально, хоть хвостики добавляй.

Правка: 25 июня 2018 15:14

g-contПостоялецwww25 июня 201815:16#80
Отсюда и вытекает необходимость писать свой CRT. Ну не весь конечно.
IBetsПользовательwww25 июня 201815:17#81
Delfigamer
Там много косяков было. Сначала был косяк с чтением и записи текстур. То есть сначала я читал тектуру в шейдере. А потом начинал писать в нее. Не обнулив SetSRV()
Затем был косяк с тем что я не занулил буффер в который пишет dxinput. Сейчас робит
IBetsПользовательwww25 июня 201815:22#82
Delfigamer
Не проще ли сразу MAX_PATH ставить в буффер без всякой динамической аллокации?. И да прогать я начал менее 2 лет назад. Ты то с детского сада наверное уже

Правка: 25 июня 2018 15:28

DelfigamerПостоялецwww25 июня 201816:11#83
IBets
> И да прогать я начал менее 2 лет назад. Ты то с детского сада наверное уже
Почти - дело пошло, кажется, с 5 класса, и с тех пор как раз прошло лет 10.

IBets
> Не проще ли сразу MAX_PATH ставить в буффер без всякой динамической аллокации?
Фишка как раз в том, чтобы работать с полными 32-тысячными путями, поддерживаемыми WinAPI, а не обрезать пути по MAX_PATH без острой необходимости.
Для этого изначально и была затеяна пляска с кодировками, ручным парсером путей и UNC - ибо встроенный в WinAPI парсер, разруливающий всякие . и .., таки обрезанный, а потому непригодный к использованию.

IBetsПользовательwww25 июня 201816:13#84
Delfigamer
Везет тебе. С 5 класса опыт уж какой.  А я хренью страдал
IBetsПользовательwww25 июня 201816:14#85
Delfigamer
Перйти на темную сторону и начать юзать Boost
MrShoorУчастникwww25 июня 201822:51#86
Delfigamer
> ибо встроенный в WinAPI парсер, разруливающий всякие . и .., таки обрезанный, а
> потому непригодный к использованию.
Винапи давно уже умеет > MAX_PATH. MAX_PATH это наследие 98ой винды.
entrywayПостоялецwww26 июня 20180:56#87
Delfigamer
> Видите подвох? А он есть. На самом деле, функция ведёт себя так:
Не так. Тебе надо убрать "+ 1" в последней строчке, а выше вернуть 8 вместо 10. GetFullPathName зануляет память по длине буфера, а ты передаешь на символ больше, чем у тебя есть.

Правка: 26 июня 2018 1:06

DelfigamerПостоялецwww26 июня 20184:53#88
entryway
> Не так. Тебе надо убрать "+ 1" в последней строчке, а выше вернуть 8 вместо 10.
Тогда вместо, например, "D:\\mist\\mist\0" в буфер запишется "D:\\mist\\mis\0".

MrShoor
> Винапи давно уже умеет > MAX_PATH
Это только на десятке.

entrywayПостоялецwww26 июня 20186:26#89
Delfigamer
> Тогда вместо, например, "D:\\mist\\mist\0" в буфер запишется "D:\\mist\\mis\0".
Хочешь сказать, что у тебя GetFullPathName, при наличии функционала проверки длины, пишет в буфер обрезанный путь? Какая система?

Правка: 26 июня 2018 6:28

Страницы: 1 2 3 4 5 6 7 Следующая »

/ Форум / Программирование игр / Графика

2001—2018 © GameDev.ru — Разработка игр