Т.к. код сюда нормально вставить нельзя, объясню на словах.
есть воид для быстрой отрисовки изображения.
отрисовка изображения требует текстуру, текстура создается посредство directx9
для текстуры нужна соответствующая переменная, которая потом используется для отрисовки, например:
void img(char path, int x, int y, int w, int h) {
DIRECTX9TEXTURE texture = NULL; - Переменная для текстуры.
if (texture == null)
//тут большая строка для создания текстуры (нужная текстура заносится в texture)
render::image(texture , x, y, w, h); - отрисовываем ранее созданную текстуру в переменную.
}
Пример использования:
img("C:\\123\\new.png", 100, 100, 100, 100);
Проблема заключается в том, что переменная с текстурой находится в void, из-за этого код слишком сильно сжирает кадры, как можно избежать этого? Примечание: если переместить переменную с текстурой за пределы void, то все будет нормально, но переменная texture должна быть обязательно в void'е, иначе другие текстуры не смогут загрузиться при использовании.
C/C++
Как починить требовательный код?
> но переменная texture должна быть обязательно в void'е, иначе другие текстуры не смогут загрузиться при использовании
чиво?
яннп
берёшь и меняешь в аргументах char path на DIRECTX9TEXTURE texture
потом загружаешь свою текстуру вне img
и передаёшь в функкцию
всё, готово
зачем загружать текстуру в функции отрисовки?
чиво?
яннп
берёшь и меняешь в аргументах char path на DIRECTX9TEXTURE texture
потом загружаешь свою текстуру вне img
и передаёшь в функкцию
всё, готово
зачем загружать текстуру в функции отрисовки?
Василий Конашев
да ты не сможешь отрисовать 2 изображения, только одно в таком случае.
Сделай img методом класса, а текстуру - его полем. Пока объект класса не убьешь - текстура живая будет, не надо будет ее каждый раз пересоздавать
Ответ - никак
void это обычный стандартный адрес, который весит 4 байта. А как пустой тип void весит 1 байт. Можно проверить с помощью sizeof(void).
Дальше улучшать и оптимизировать уже некуда, это предел для языка.
Если сменить void на что-то другое, то теряется переносимость кода, и придётся для каждого типа графических объектов писать костыли.
void это обычный стандартный адрес, который весит 4 байта. А как пустой тип void весит 1 байт. Можно проверить с помощью sizeof(void).
Дальше улучшать и оптимизировать уже некуда, это предел для языка.
Если сменить void на что-то другое, то теряется переносимость кода, и придётся для каждого типа графических объектов писать костыли.
> есть воид для ...
По человечески выражайтесь.
> Проблема заключается в том, что переменная с текстурой находится в void, из-за этого код слишком сильно сжирает кадры, как можно избежать этого?
Текстуры загружаются в видеопамять один раз при загрузке сцены/уровня, либо при появлении объектов, если текстур слишком много, а объекты появляются далеко не каждый раз. Каждый кадр загружать текстуру не нужно.
>Примечание: переменная texture должна быть обязательно в void'е, иначе другие текстуры не смогут загрузиться при использовании.
Это уже бред.
По человечески выражайтесь.
> Проблема заключается в том, что переменная с текстурой находится в void, из-за этого код слишком сильно сжирает кадры, как можно избежать этого?
Текстуры загружаются в видеопамять один раз при загрузке сцены/уровня, либо при появлении объектов, если текстур слишком много, а объекты появляются далеко не каждый раз. Каждый кадр загружать текстуру не нужно.
>Примечание: переменная texture должна быть обязательно в void'е, иначе другие текстуры не смогут загрузиться при использовании.
Это уже бред.
Есть pastebin для таких целей.
А вообще не очень понял. Как уже посоветовали, вынеси ты текстуру из функции. Ты ж используешь ООП и можешь сделать текстуру полем объекта. Ну на крайний случай есть глобальные переменные, статические.
Как понимаю, у тебя тормозится все из-за того, что ты постоянно подгружаешь текстуру. Так создай какой-нибудь аналог кеша, который будет брать самые постоянно используемые текстуры или инициализируй их где-нибудь ещё.
А void тут не причем, это просто значит, что твоя функция ничего не возвращает. Это никак не влияет на производительность само по себе.
А вообще не очень понял. Как уже посоветовали, вынеси ты текстуру из функции. Ты ж используешь ООП и можешь сделать текстуру полем объекта. Ну на крайний случай есть глобальные переменные, статические.
Как понимаю, у тебя тормозится все из-за того, что ты постоянно подгружаешь текстуру. Так создай какой-нибудь аналог кеша, который будет брать самые постоянно используемые текстуры или инициализируй их где-нибудь ещё.
А void тут не причем, это просто значит, что твоя функция ничего не возвращает. Это никак не влияет на производительность само по себе.
Похожие вопросы
- Напишите пожалуйста код на 5 вариант очень простой я на 1 курсе вуза и нужен простой код.
- Написать код на языке C++
- Как оптимизировать код, чтобы не было превышения по времени к задаче (C++, динамическое программирование)?
- Как оптимизировать код, чтобы не было превышения по времени к задаче (C++)?
- Ошибки в коде. Почему не работает и как сделать чтобы заработало ?
- Написать код на языке си
- Помогите с кодом C++
- Как можно доработать код С++?
- Объясните код с++
- Помогите с кодом с++