Другое С/С++ Вопрос - Ответ

kin4stat

mq-team
Всефорумный модератор
2,730
4,710
Как применить шейдер на текстуру? типо вот тут я поставил хук на RpClumpRender четотам, и ставил шейдер перед этой функцией, так мне всё, кроме того что надо зарисовало, кароче мне надо хукать рендер текстуры, проверять её название и ставить на неё шейдер
помогите ПОЖАЛУЙСТА)
Посмотреть вложение 163317
Ну я делал так:

0x534310 - CEntity::Render

Тут проверяешь, что происходит рендер нужного тебе энтити(машина)

Потом в 0x7FDE70 - RwSetTexture
И потом texture->name сравниваешь с нужным тебе названием

Потом можно захукать SetPixelShader, что скорее всего необязательно, но я сделал так, и выставляешь нужный тебе

А список материалов можно найти как

RpClumpForAllAtomics - if rwObject->type == rpCLUMP
rpClump->geometry.matList
else
rpClump->geometry.matList
 

Savchik Blazer

Но я, мечту свою лелея...
Проверенный
671
293
Как можно поймать действие другой dll в процессе? Условно имеется две dll, первая изменяет память процесса, а вторая должна поймать это изменнение
 

Dark_Knight

Me, me and me.
Друг
4,062
2,077
Как можно поймать действие другой dll в процессе? Условно имеется две dll, первая изменяет память процесса, а вторая должна поймать это изменнение
Хук по адресу. От кинча есть хорошие либы для подобного. Хотя лично сам ими не пользовался.
 

loganhackerdff

Известный
868
517
снова здрасте, теперь мне нужна помощь с созданием шейдера, я не хочу создавать дохуя шейдеров, можно же просто выставлять ему цвет

тоесть мне не подходит вот это, что всё используют
C++:
static HRESULT generateShader(IDirect3DPixelShader9** pShader, float alpha, float red, float green, float blue)
{
    char szShader[256];
    ID3DXBuffer* pShaderBuffer = nullptr;
    sprintf_s(szShader, sizeof(szShader), "ps.1.1\ndef c0, %f, %f, %f, %f\nmov r0,c0", red, green, blue, alpha);
    if (FAILED(D3DXAssembleShader(szShader, sizeof(szShader), NULL, NULL, 0, &pShaderBuffer, NULL)))
        return E_FAIL;

    if (FAILED(DEVICE->CreatePixelShader((const DWORD*)pShaderBuffer->GetBufferPointer(), pShader)))
        return E_FAIL;

    return S_OK;
}

я пытался сделать, но шейдер не компилируеться, типа вроде правильно всё, хз, уроки посмотрел, гайды почитал, чертовщина
C++:
static HRESULT generateShader(IDirect3DPixelShader9** pShader)
{
    char szShader[UINT16_MAX];

    ID3DXBuffer* pShaderBuffer = nullptr;
    LPD3DXCONSTANTTABLE table;
    strcpy(szShader, "float4 value; float4 main() : COLOR { return value; }");

    if (FAILED(D3DXCompileShader(szShader, sizeof(szShader), 0, 0, "main", "ps_3_0", 0, &pShaderBuffer, 0, &table)))
    {
        std::cout << "fail\n"; // -- тут фейл!
        return E_FAIL;
    }

    if (FAILED(DEVICE->CreatePixelShader((const DWORD*)pShaderBuffer->GetBufferPointer(), pShader)))
        return E_FAIL;

    return S_OK;
}

Ебать ахуеть блять заебало уже, хуйню какую-то изменил, заработало
смотрите, кому надо
C++:
static HRESULT generateShader(IDirect3DPixelShader9** pShader)
{
    char szShader[512];

    ID3DXBuffer* pShaderBuffer = nullptr;
    strcpy(szShader, "float4 value; float4 main() : COLOR { return value; }");

    if (FAILED(D3DXCompileShader(szShader, strlen(szShader), 0, 0, "main", D3DXGetPixelShaderProfile(DEVICE), D3DXSHADER_DEBUG, &pShaderBuffer, 0, 0)))
        return E_FAIL;
 
    if (FAILED(DEVICE->CreatePixelShader((const DWORD*)pShaderBuffer->GetBufferPointer(), pShader)))
        return E_FAIL;

    return S_OK;
}

Кто бы мог подумать блять, на видеокарте AMD не работает нахуй! только nvidia
 
Последнее редактирование:

Savchik Blazer

Но я, мечту свою лелея...
Проверенный
671
293
Как можно реализовать рисования текста в окне игры, не имгуи?
 

!Sam#0235

Активный
121
40
how can I get the RGB - hexadecimal values and write them to a .ini file?
unknown (1).png
 

!Sam#0235

Активный
121
40
игра вылетает, что не так?

C++:
#include <Windows.h>
#include <d3d9.h>
#include <d3dx9.h>
#pragma comment(lib, "d3d9.lib")
#pragma comment(lib, "d3dx9.lib")

typedef HRESULT(WINAPI* _EndScene)(IDirect3DDevice9*); //прототип
_EndScene oEndScene; //экземпляр прототипа, для возврата оригинала

typedef HRESULT(WINAPI* _Reset)(IDirect3DDevice9*, D3DPRESENT_PARAMETERS*);
_Reset oReset;


HRESULT WINAPI myEndScene(IDirect3DDevice9* m_pDevice)
{
      ImGui_ImplDX9_NewFrame();
      ImGui_ImplWin32_NewFrame();
      ImGui::NewFrame();

      ImGui::EndFrame();
      ImGui::Render();
      ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
    return oEndScene(m_pDevice); // возврат оригинала
}

HRESULT WINAPI myReset(IDirect3DDevice9* m_pDevice, D3DPRESENT_PARAMETERS* pPresentationParameters)
{
    auto  result = oReset(m_pDevice, pPresentationParameters);
    return result;
}

void InitHook()
{
    void** vTableDevice = *(void***)(*(DWORD*)0xC97C28); // адрес Device
    VMTHookManager* vmtHooks = new VMTHookManager(vTableDevice);
    oEndScene = (_EndScene)vmtHooks->Hook(42, (void*)myEndScene);  // 42 - номер EndScene
}

int WINAPI Thread()
{
    while (*(DWORD*)0xC8D4C0 != 9) // проверка на статус загрузки игры
        Sleep(100);
    InitHook();
    return 0;
}

BOOL WINAPI DllMain(HMODULE hModule, DWORD dwReason, LPVOID lpReserved)
{
    if (dwReason == DLL_PROCESS_ATTACH)
        CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)Thread, NULL, NULL, NULL);
    return TRUE;
}