HLFX.Ru Forum Страницы (260): « Первая ... « 183 184 185 186 [187] 188 189 190 191 » ... Последняя »
Показать все 3886 сообщений этой темы на одной странице

HLFX.Ru Forum (https://hlfx.ru/forum/index.php)
- Half-Life SDK (https://hlfx.ru/forum/forumdisplay.php?forumid=8)
-- Нубские вопросы от <censored> и других нубов (https://hlfx.ru/forum/showthread.php?threadid=4535)


Отправлено Shapirlic 31-03-2021 в 11:29:

Ради уточнения скажу что речь идёт о загрузке HD текстур.
Прохожусь по всех текстуркам уровня, ищу их dds/tga вариант в папке, гружу, попутно сохраняя индексы новых HD текстур в мапу типа <НазваниеТекстуры, индекс>. Потом подменяю индексы текстур на HD. При загрузке/смене уровня снова смотрю в мапу, догружаю новые HD по надобности


Отправлено Дядя Миша 31-03-2021 в 11:30:

Я надеюсь, после загрузки в видеопамять ты эти текстуры освобождаешь при помощи COM_FreeFile ?

Добавлено 31-03-2021 в 14:30:

Цитата:
Shapirlic писал:
Потом подменяю индексы текстур на HD

Перед подменой надо еще сделать glDeleteTexture.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Shapirlic 31-03-2021 в 11:31:

Уровень - тот где 3 тентакли под двигателем. Это был первый левел где началась эта проблема. Решилась она проставление usehunk = 2, и оттуда я дошёл до монорельса который после гарга без проблем. Как я понимаю usehunk = 2 опасно, поэтому надо мне исправить проблемы с загрузкой файлов

Добавлено 31-03-2021 в 14:31:

Цитата:
Дядя Миша писал:
COM_FreeFile

Да

Цитата:
Дядя Миша писал:
glDeleteTexture

Спасибо, попробую


Отправлено Дядя Миша 31-03-2021 в 11:34:

Посмотри для начала в менеджере задач сколько памяти потребляет твой мод в среднем. Ну, вся халфа вместе с ним.

Добавлено 31-03-2021 в 14:32:

И еще. Есть ли проверка, что COM_LoadFile вернул валидный указатель или оно прямо внутри движка крэшится?

Добавлено 31-03-2021 в 14:34:

Текстуру удолять вот так

C++ Source Code:
glDeleteTextures( 1, &texnum );

Я вот не помню, обнуляет ли драйвер номер бинда, потому что на VBO он этого к примеру не делает, но теоретически может. Если так, то надо скопировать этот номер в отдельную переменную и высвобождать как бы уже его. glGenTextures вызывать при этом не требуется, т.к. халфа не использует этот механизм, хотя такое поведение и deprecated.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Shapirlic 31-03-2021 в 11:43:

Стоят конечно проверочки типа

if (!file)
{
Log("CreateTexture failed to load file: %s\n", filename);
...

Крашится где то внутри, что удивляет

Добавлено 31-03-2021 в 14:35:

Цитата:
Дядя Миша писал:
Я вот не помню, обнуляет ли драйвер номер бинда, потому что на VBO он этого к примеру не делает, но теоретически может. Если так, то надо скопировать этот номер в отдельную переменную и высвобождать как бы уже его. glGenTextures вызывать при этом не требуется, т.к. халфа не использует этот механизм, хотя такое поведение и deprecated.


Имеешь ввиду переиспользовать эти индексы потом?

Добавлено 31-03-2021 в 14:43:

Всё пересмотрел, нашёл в одной ветке ошибку в плане отсутствия COM_FreeFile
Вероятно это оно, буду проверять
Спасибо за инфу.


Отправлено Дядя Миша 31-03-2021 в 11:46:

Цитата:
Shapirlic писал:
Крашится где то внутри, что удивляет

Внутри движка? Там нечему крашиться, там malloc и всё. Ни разу не видел чтобы крашился malloc.

Цитата:
Shapirlic писал:
Имеешь ввиду переиспользовать эти индексы потом?

Проверить какое там число до вызова glDeleteTextures и какое после.
Если после вызова там 0, значит драйвер его таки обнулил. Надо завести отдельную переменную и держать там копию этого числа, т.к. оно тебе нужно.
Хотя может быть достаточно вызова glLoadImage и старое изображение автоматически будет отправлено в утиль. Не помню я вот этот момент.
А может быть это еще от драйвера зависит.

Крашится у тебя скорее всего что-то совершенно другое, последний раз, когда я видел твой мод, там постоянно что-то вылетало, индексы путались, итд. Т.е. он нестабильный.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Shapirlic 31-03-2021 в 11:56:

Цитата:
Дядя Миша писал:
Крашится у тебя скорее всего что-то совершенно другое, последний раз, когда я видел твой мод, там постоянно что-то вылетало, индексы путались, итд. Т.е. он нестабильный.


Вполне вероятно)
По текстуркам вроде ушло, спасибо что навёл на посмотреть COM_FreeFile.


Отправлено Shapirlic 31-03-2021 в 18:29:

Копаю дальше в мод, решил его покрутить под ксашем, чтобы увидеть ошибки с другой перспективы. Пришлось ксаш3Д собрать Visual Studio 2017, ибо мод на ней делаю. Первое что выпало -

Добавлено 31-03-2021 в 21:29:

Это даст мне хотя бы какой то манёвр, надеюсь, с помощью твоего двигла наконец допилю хоть до уровня чтобы не выкидывало )


Отправлено Дядя Миша 31-03-2021 в 18:34:

Ну да, голдсорс молча валится, в ксаше можно хотя бы отловить ошибку.
Да и он частенько информативно ругается в консоль там, где голдсорс просто падает.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Shapirlic 31-03-2021 в 18:44:

В общем на том месте где Халфа падает ксаш не падал, поэтому я подсунул ему сейв с халвы с проблемного места, ксаш его грузанул раз, а на вторую загрузку выдал это. Есть идеи?

Добавлено 31-03-2021 в 21:44:

Понятно, что порча памяти. Хотя бы куда смотреть есть идеи?


Отправлено Shapirlic 31-03-2021 в 19:09:

Колстек

Добавлено 31-03-2021 в 22:06:

Это карта с2а3 и бьётся сейв после того как ломаешь замок, который удерживает пушаблы-бочки что должны всплыть.

Добавлено 31-03-2021 в 22:09:

Есть ли какой нить способ отследить все события произошедшие на карте к определенному моменту? Чтобы хотябы знать что проверять, потому что предидущее заявление про брекаблу замок неверно, там какой то рандом


Отправлено Дядя Миша 31-03-2021 в 19:34:

Цитата:
Shapirlic писал:
Понятно, что порча памяти. Хотя бы куда смотреть есть идеи?


Так он же тебе открытым текстом расписал строчки в исходниках куда смотреть. Открываем сорцы ксаша server\sv_game.c:2942 и смотрим.
А там у нас pfnPvAllocEntPrivateData
проще говоря - деномически выделяемая память для эдиктов, содержимое их классов. Как их можно испортить? Проще всего - если одна энтить указывает на другую и мы начинаем её модифицировать через этот указатель. Если не ошибаюсь (почему я всё за всех должен помнить?)
у тебя в моде пули сделаны энтитями. Значит у каждой пули есть свой овнер.
ну или что-то вроде этого. Вообщем наиболее частая ошибка касается именно прожектайлов, которые связаны с своими родителями.
Проблема в том, что почти никто не учитывает факт их удаления с карты или к примеру тот факт, что игрока разобрало на гибсы, а пуля еще летит.
Вообщем идёт попытка модификации связанного эдикта и она может даже оказаться довольно успешной. Вот только на месте этой энтити может оказаться любая другая. У которой размер класса меньше, а мы к ней обращаемся как к другой и вылезаем за границы отведённой памяти.
Порча и вылет. В первой кваке, к слову, такие фокусы были абсолютно безопасными из-за виртуальной машины, которая интерпретировала все указатели, как номера эдиктов (а других указателей там и вовсе не было).
Поэтому любая попытка что-либо прочесть по нулевому указателю автоматически приводило код к чтению полей ворлдспавна. А вот при попытке туда что-то записать уже крашился сервер с ошибкой "assignment to world entity" или что-то вроде этого.
Потом, для халфы и ку2 соответственно виртуалку переписали на компилируемый язык и доставили много радости моддерам.

Добавлено 31-03-2021 в 22:33:

Цитата:
Shapirlic писал:
предидущее заявление про брекаблу замок неверно, там какой то рандом

Когда память портишь - всегда рандом получается. Ты же не знаешь в каком порядке блоки расположаться при следующем запуске.

Добавлено 31-03-2021 в 22:34:

А что означает сообщение "Waterlevel is out" ? Нет ли в этом антисемитизма?

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Shapirlic 31-03-2021 в 19:49:

По колстеку было видно что там с памятью эдиктов, да, но как именно её можно было поломать я представить не мог. Спасибо за наводки, буду глядеть в оба.


Отправлено Дядя Миша 31-03-2021 в 20:05:

Забыл добавить. В кваке был константный размер для всех эдиктов, равный максимальному. Поэтому там ни с какой точки зрения нельзя было промахнуться и испортить память. В халфе конечно экономия, эдикт занимает ровно столько места, сколько требуется его классу.

__________________
My Projects: download page

F.A.Q по XashNT
Блог разработчика в телеграме

Цитата:

C:\DOCUME~1\C4C5~1\LOCALS~1\Temp\a33328if(72) : see declaration of 'size_t'


Отправлено Shapirlic 31-03-2021 в 20:43:

class CClass
{
bool SomeArray[5];
...

TYPEDESCRIPTION CClass::m_SaveData[] =
{
DEFINE_ARRAY( CClass, SomeArray, FIELD_BOOLEAN, 5 ),

Вот что трешило память

Нужно было поменять тип с bool на BOOL


Временная зона GMT. Текущее время 12:05. Страницы (260): « Первая ... « 183 184 185 186 [187] 188 189 190 191 » ... Последняя »
Показать все 3886 сообщений этой темы на одной странице

На основе vBulletin версии 2.3.0
Авторское право © Jelsoft Enterprises Limited 2000 - 2002.
Дизайн и программирование: Crystice Softworks © 2005 - 2024