You are not logged in.
Здравствуйте! У меня есть вопрос, помогите если в курсе.
Есть структура:
struct RwTexture
{
RwRaster *raster;
RwTexDictionary *txd;
RwListEntry TXDList;
char name[RW_TEXTURE_NAME_LENGTH];
char mask[RW_TEXTURE_NAME_LENGTH];
unsigned int flags;
int refs;
};
1-й параметр которой - указатель на структуру RwRaster;
struct RwRaster
{
RwRaster *parent; // 0
unsigned char *pixels;
unsigned char *palette; // 8
int width, height, depth; // 12, 16 / 0x10, 20
int stride; // 24 / 0x18
short u, v;
unsigned char type;
unsigned char flags;
unsigned char privateFlags;
unsigned char format;
unsigned char *origPixels;
int origWidth, origHeight, origDepth;
void* renderResource;
};
Собственно сам вопрос:
*pixels - это указатель на карту пикселей? Если да, то в кам формате они там хранятся?
Offline
Спасибо! Инфу по RWG я читал. Прсто я пытаюсь загрузить пиксели из *.bmp файла, фомат задаю rwRASTERFORMAT8888 | rwRASTERPIXELLOCKEDWRITE(32 bit + write), и подставляю вместо указателя на *pixels свой. Но вместо моей картинки на объекте рисуется прозрачный фон:blush: Не знаешь в чём здесь проблема?
Offline
Я посмотрел в IDA функцию создания растра RwRasterCreate но там в поле origPixels вообще ничего не записывается.
По поводу stride, в документации написано, что это линии растра байтов, но я так и не понял, что это значит. А как его корректно выставить?
Offline
VladVegas, в каких целях надо использовать полученную картинку? В игре, или в стороннем приложении?
В RW SDK есть модуль RtBmp, он позволяет создать обьект RwRaster на основе bmp-файла.
Last edited by DK22Pac (12-01-2014 22:35)
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
DK22Pac, я собираюсь отрисовать текстуру в игре на объекте(RwFrame). Про RtBmp я знаю(если ты об RtBMPImageRead), но я хотел бы загрузить картинку(массив пикселей) из памяти, возможно ли такое?
Offline
RwTexture *CResources::LoadTextureFromMemory(char *data, unsigned int size) { CPatch::SetChar(0x7CF9CA, rwSTREAMMEMORY); RwMemory memoryImage; unsigned int width, height, depth, flags; memoryImage.start = data; memoryImage.length = size; RwImage *image = RtPNGImageRead((char *)&memoryImage); RwImageFindRasterFormat(image, 4, &width, &height, &depth, &flags); RwRaster *raster = RwRasterCreate(width, height, depth, flags); RwRasterSetFromImage(raster, image); RwImageDestroy(image); CPatch::SetChar(0x7CF9CA, rwSTREAMFILENAME); return RwTextureCreate(raster); }
Plugin-SDK https://github.com/DK22Pac/plugin-sdk
Discord-сервер по plugin-sdk и программированию в GTA
RU https://discord.gg/QEesDGb
ENG https://discord.gg/zaVqFQv
Offline
DK22Pac, спасибо большое, очень помог!!! listener, тебе тоже спасибо! И если можно, объясните еще пару вещей:
CPatch::SetChar(0x7CF9CA, rwSTREAMMEMORY);
Если я правильно понял, то этой функцией ты подменил параметр type перед вызовом RwStreamOpen в
функции RtPNGImageRead.
(я в C++ не очень, я в основном на Delphi и ASM), и что за тип RwMemory, вернее из чего он(эта структура) состоит? Заранее спасибо!
Last edited by VladVegas (07-09-2013 12:08)
Offline