directx9 shaders on redeon

loganhackerdff

Известный
Автор темы
868
517
я в шоке, написал эту тонировку, всё работает у мен как надо, на gtx1660, а у дружбана на radeon не работет!!!
помогите пж, как этот шейдер сделать, чтоб он на amd видюхе тоже работал,

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

вот как я делаю шейдер:
1660909427845.png


байтики всё правильные, у меня работает, на amd - нет

думал сначала не работает из-за компиляции шейдера, убрал её, заменив байтиками этими, всё равно
 

loganhackerdff

Известный
Автор темы
868
517
Код шейдера где?

C++:
float4 value; float4 main() : COLOR { return value; }
но я его скомпилировал и в байты перевел, было вот так, но тоже не работало(на amd, на nvidia работало, видеокарта у него radeon hd 5750):
C++:
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_SKIPVALIDATION, &pShaderBuffer, 0, 0)))
        return E_FAIL;

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

    return S_OK;
}

1660912167490.png


протестил ещё у одного друга на amd у него amd rx560, тоже не работает
 
Последнее редактирование:

SR_team

like pancake
BH Team
4,720
6,369
C++:
float4 value; float4 main() : COLOR { return value; }
но я его скомпилировал и в байты перевел, было вот так, но тоже не работало(на amd, на nvidia работало, видеокарта у него radeon hd 5750):
C++:
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_SKIPVALIDATION, &pShaderBuffer, 0, 0)))
        return E_FAIL;

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

    return S_OK;
}

Посмотреть вложение 163691

протестил ещё у одного друга на amd у него amd rx560, тоже не работает

Попробуй такой шейдер использовать:
C-like:
float4 value; float4 main(float2 tc:TEXCOORD0) : COLOR { return value; }

А вообще зачем тебе шейдер, если ты просто цвет задаешь?При рендере же можно указать, что текстура должна смешиваться с определенным цветом

И еще, какую версию D3DXGetPixelShaderProfile(DEVICE) возвращает? Мб там что-то nvidia специфичное? Попробуй указать "ps_3_0" - это самая новая версия шейдеров, которую поддерживает DX9
 

loganhackerdff

Известный
Автор темы
868
517
Попробуй такой шейдер использовать:
C-like:
float4 value; float4 main(float2 tc:TEXCOORD0) : COLOR { return value; }

А вообще зачем тебе шейдер, если ты просто цвет задаешь?При рендере же можно указать, что текстура должна смешиваться с определенным цветом
нуу, я пробовал через mesh->material.color но не работало, типа крашило если вид от первого лица включать и ещё текстура вся черная, цвет не изменялся
спасибо, щас попробую
 

loganhackerdff

Известный
Автор темы
868
517
Спасибо огромное, с пиксельным шейдером 2.0 заработало, и ещё, лучше хукать не RwSetTexture,а objectLighting (005DA6A0)
там можно будет проверить альфа цвет материала, он 0 если стекло открыто сервером

На ARZ все шейдеры с 3.0 собираются и работают нормально на AMD
видимо в D3DXGetPixelShaderProfile ошибка