GTA Vice City > Идеи

Отключение сглаживания текстур в Вайсе

(1/2) > >>

ilufir:
Попытавшись сделать пиксельные шрифты в Вайсе, я обнаружил, что настройки TXD никоим образом не влияют на отображение шрифта в самой игре - сглаживание все еще на месте. У меня появился вопрос - как это, собственно, убрать?

Shagg_E:
Я знаю только один способ(через ж, как всегда) - "эмуляция" "пиксельности" текстур(шрифтов): изначально саму текстуру делать высокого разрешения, но низкой детализации, т.е., из этого:

сделать это:


В этом случае никакое игровое сглаживание не будет проблемой:D

ilufir:

--- Цитата: Shagg_E от Декабрь 28, 2016, 11:41:49 pm ---Я знаю только один способ(через ж, как всегда) - "эмуляция" "пиксельности" текстур(шрифтов): изначально саму текстуру делать высокого разрешения, но низкой детализации, т.е., из этого:

сделать это:


В этом случае никакое игровое сглаживание не будет проблемой:D

--- Конец цитаты ---


Ну это уже костыли. Увы, хоть оно и работает, появляется такая проблема, как утечки памяти - из-за этого теряется стабильность. А этого нам не надо

DK:

--- Код: C++ ---#include "plugin_vc.h" using namespace plugin; class FontRenderingSettings {public:    FontRenderingSettings() {        patch::SetUChar(0x5787EA, rwFILTERNEAREST);        patch::SetUChar(0x5788EA, rwFILTERNEAREST);    }} plg;
Теперь пример с текстурой, которую показал Shagg.




--- Код: C++ ---#include "plugin_vc.h"#include "game_vc\CSprite2d.h"#include "game_vc\CFont.h" using namespace plugin; class ImageDraw {public:    static RwRaster *LoadRasterFromBMP(char *filepath) {        RwImage *image = RtBMPImageRead(filepath);        if (image) {            int width, height, depth, format;            RwImageFindRasterFormat(image, rwRASTERTYPETEXTURE, &width, &height, &depth, &format);            RwRaster *raster = RwRasterCreate(width, height, depth, format);            RwRasterSetFromImage(raster, image);            RwImageDestroy(image);            return raster;        }        return nullptr;    }     ImageDraw() {        static RwRaster *gRaster = nullptr;        static int savedState;         Events::initRwEvent += [] {            gRaster = LoadRasterFromBMP(PLUGIN_PATH("image.bmp"));        };         Events::drawingEvent += [] {            if (gRaster) {                CSprite2d::DrawRect(CRect(0, 0, SCREEN_COORD_MAX_X, SCREEN_COORD_MAX_Y), CRGBA(0, 0, 0, 240));                 static wchar_t tmpText[64];                 CFont::SetColor(CRGBA(255, 255, 255, 255));                CFont::SetDropShadowPosition(0);                CFont::SetBackgroundOff();                CFont::SetFontStyle(1);                CFont::SetCentreOn();                CFont::SetPropOn();                CFont::SetCentreSize(SCREEN_COORD_MAX_X);                CFont::SetScale(SCREEN_MULTIPLIER(1.2f), SCREEN_MULTIPLIER(2.4f));                 swprintf(tmpText, L"Raster: %dx%dx%d", gRaster->width, gRaster->height, gRaster->depth);                CFont::PrintString(SCREEN_COORD_LEFT(350.0f), SCREEN_COORD_TOP(620.0f), tmpText);                CFont::PrintString(SCREEN_COORD_LEFT(350.0f), SCREEN_COORD_TOP(670.0f), L"Filtering: NEAREST POINT");                 swprintf(tmpText, L"Raster: %dx%dx%d", gRaster->width, gRaster->height, gRaster->depth);                CFont::PrintString(SCREEN_COORD_LEFT(900.0f), SCREEN_COORD_TOP(620.0f), tmpText);                CFont::PrintString(SCREEN_COORD_LEFT(900.0f), SCREEN_COORD_TOP(670.0f), L"Filtering: LINEAR");                 RwRenderStateSet(rwRENDERSTATETEXTURERASTER, gRaster);                RwRenderStateGet(rwRENDERSTATETEXTUREFILTER, &savedState);                 RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, RWRSTATE(rwFILTERNEAREST));                CSprite2d::SetVertices(CRect(SCREEN_COORD_LEFT(100.0f), SCREEN_COORD_TOP(100.0f), SCREEN_COORD_LEFT(600.0f), SCREEN_COORD_TOP(600.0f)),                    CRGBA(255, 255, 255, 255), CRGBA(255, 255, 255, 255), CRGBA(255, 255, 255, 255), CRGBA(255, 255, 255, 255));                RwIm2DRenderPrimitive(rwPRIMTYPETRIFAN, CSprite2d::maVertices, 4);                 RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, RWRSTATE(rwFILTERLINEAR));                CSprite2d::SetVertices(CRect(SCREEN_COORD_LEFT(650.0f), SCREEN_COORD_TOP(100.0f), SCREEN_COORD_LEFT(1150.0f), SCREEN_COORD_TOP(600.0f)),                    CRGBA(255, 255, 255, 255), CRGBA(255, 255, 255, 255), CRGBA(255, 255, 255, 255), CRGBA(255, 255, 255, 255));                RwIm2DRenderPrimitive(rwPRIMTYPETRIFAN, CSprite2d::maVertices, 4);                 RwRenderStateSet(rwRENDERSTATETEXTUREFILTER, RWRSTATE(savedState));                RwRenderStateSet(rwRENDERSTATETEXTURERASTER, nullptr);            }        };         Events::shutdownRwEvent += [] {            if (gRaster)                RwRasterDestroy(gRaster);        };    }} plg;

Shagg_E:
А вот и изящное решение в виде плагина. Круто.



----


--- Цитата: ilufir от Декабрь 29, 2016, 09:35:23 pm ---Ну это уже костыли. Увы, хоть оно и работает, появляется такая проблема, как утечки памяти - из-за этого теряется стабильность. А этого нам не надо

--- Конец цитаты ---
Ну, я и не писал, что это супер решение  ;D Просто рабочее(у меня сплошь и рядом в моддинге так).

Навигация

[0] Главная страница сообщений

[#] Следующая страница

Перейти к полной версии