mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-01-23 15:31:16 +00:00
fix rendering somewhat, some geometry shows up
This commit is contained in:
parent
06f2179ea1
commit
fb17107bca
@ -1,10 +0,0 @@
|
|||||||
shaders += main.frag.gxp main.vert.gxp image.frag.gxp
|
|
||||||
shaders += clear.frag.gxp clear.vert.gxp
|
|
||||||
|
|
||||||
all: $(shaders)
|
|
||||||
|
|
||||||
%.vert.gxp: %.vert.cg
|
|
||||||
./psp2cgc.exe -Wperf -profile sce_vp_psp2 $< -o $@
|
|
||||||
|
|
||||||
%.frag.gxp: %.frag.cg
|
|
||||||
./psp2cgc.exe -Wperf -profile sce_fp_psp2 $< -o $@
|
|
||||||
@ -23,7 +23,7 @@ bool with_razor = false;
|
|||||||
#define VITA_GXM_SCREEN_WIDTH 960
|
#define VITA_GXM_SCREEN_WIDTH 960
|
||||||
#define VITA_GXM_SCREEN_HEIGHT 544
|
#define VITA_GXM_SCREEN_HEIGHT 544
|
||||||
#define VITA_GXM_SCREEN_STRIDE 960
|
#define VITA_GXM_SCREEN_STRIDE 960
|
||||||
#define VITA_GXM_PENDING_SWAPS 2
|
#define VITA_GXM_PENDING_SWAPS 3
|
||||||
|
|
||||||
#define VITA_GXM_COLOR_FORMAT SCE_GXM_COLOR_FORMAT_A8B8G8R8
|
#define VITA_GXM_COLOR_FORMAT SCE_GXM_COLOR_FORMAT_A8B8G8R8
|
||||||
#define VITA_GXM_PIXEL_FORMAT SCE_DISPLAY_PIXELFORMAT_A8B8G8R8
|
#define VITA_GXM_PIXEL_FORMAT SCE_DISPLAY_PIXELFORMAT_A8B8G8R8
|
||||||
@ -41,11 +41,11 @@ typedef struct Vertex {
|
|||||||
} Vertex;
|
} Vertex;
|
||||||
|
|
||||||
|
|
||||||
INCBIN(main_vert_gxp, "main.vert.gxp");
|
INCBIN(main_vert_gxp, "shaders/main.vert.gxp");
|
||||||
INCBIN(main_frag_gxp, "main.frag.gxp");
|
INCBIN(main_frag_gxp, "shaders/main.frag.gxp");
|
||||||
INCBIN(clear_vert_gxp, "clear.vert.gxp");
|
INCBIN(clear_vert_gxp, "shaders/clear.vert.gxp");
|
||||||
INCBIN(clear_frag_gxp, "clear.frag.gxp");
|
INCBIN(clear_frag_gxp, "shaders/clear.frag.gxp");
|
||||||
INCBIN(image_frag_gxp, "image.frag.gxp");
|
INCBIN(image_frag_gxp, "shaders/image.frag.gxp");
|
||||||
|
|
||||||
const SceGxmProgram* mainVertexProgramGxp = (const SceGxmProgram*)_inc_main_vert_gxpData;
|
const SceGxmProgram* mainVertexProgramGxp = (const SceGxmProgram*)_inc_main_vert_gxpData;
|
||||||
const SceGxmProgram* mainFragmentProgramGxp = (const SceGxmProgram*)_inc_main_frag_gxpData;
|
const SceGxmProgram* mainFragmentProgramGxp = (const SceGxmProgram*)_inc_main_frag_gxpData;
|
||||||
@ -481,7 +481,7 @@ static bool create_gxm_renderer(int width, int height, GXMRendererData* data) {
|
|||||||
// image
|
// image
|
||||||
if(SCE_ERR(sceGxmShaderPatcherCreateFragmentProgram,
|
if(SCE_ERR(sceGxmShaderPatcherCreateFragmentProgram,
|
||||||
data->shaderPatcher,
|
data->shaderPatcher,
|
||||||
data->mainFragmentProgramId,
|
data->imageFragmentProgramId,
|
||||||
SCE_GXM_OUTPUT_REGISTER_FORMAT_UCHAR4,
|
SCE_GXM_OUTPUT_REGISTER_FORMAT_UCHAR4,
|
||||||
SCE_GXM_MULTISAMPLE_NONE,
|
SCE_GXM_MULTISAMPLE_NONE,
|
||||||
&blendInfoTransparent,
|
&blendInfoTransparent,
|
||||||
@ -490,9 +490,9 @@ static bool create_gxm_renderer(int width, int height, GXMRendererData* data) {
|
|||||||
)) return false;
|
)) return false;
|
||||||
|
|
||||||
// vertex uniforms
|
// vertex uniforms
|
||||||
data->uModelViewMatrixParam = sceGxmProgramFindParameterByName(mainVertexProgramGxp, "uModelViewMatrix");
|
data->uModelViewMatrix = sceGxmProgramFindParameterByName(mainVertexProgramGxp, "uModelViewMatrix");
|
||||||
data->uNormalMatrixParam = sceGxmProgramFindParameterByName(mainVertexProgramGxp, "uNormalMatrix");
|
data->uNormalMatrix = sceGxmProgramFindParameterByName(mainVertexProgramGxp, "uNormalMatrix");
|
||||||
data->uProjectionMatrixParam = sceGxmProgramFindParameterByName(mainVertexProgramGxp, "uProjectionMatrix");
|
data->uProjectionMatrix = sceGxmProgramFindParameterByName(mainVertexProgramGxp, "uProjectionMatrix");
|
||||||
|
|
||||||
// fragment uniforms
|
// fragment uniforms
|
||||||
data->uLights = sceGxmProgramFindParameterByName(mainFragmentProgramGxp, "uLights"); // SceneLight[3]
|
data->uLights = sceGxmProgramFindParameterByName(mainFragmentProgramGxp, "uLights"); // SceneLight[3]
|
||||||
@ -530,31 +530,6 @@ static bool create_gxm_renderer(int width, int height, GXMRendererData* data) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#define VITA_GXM_PENDING_SWAPS 2
|
|
||||||
|
|
||||||
/*
|
|
||||||
#include <taihen.h>
|
|
||||||
static tai_hook_ref_t local_open_hook;
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
SceUID hook_local_open(const char *path, int flags, SceMode mode) {
|
|
||||||
SceUID fd = ({
|
|
||||||
struct _tai_hook_user *cur, *next;
|
|
||||||
cur = (struct _tai_hook_user *)(local_open_hook);
|
|
||||||
next = (struct _tai_hook_user *)cur->next;
|
|
||||||
(next == __null) ?
|
|
||||||
((SceUID(*)(const char*, int, int))cur->old)(path, flags, mode) :
|
|
||||||
((SceUID(*)(const char*, int, int))next->func)(path, flags, mode);
|
|
||||||
});
|
|
||||||
|
|
||||||
printf("open in razor: %s, ret: %x", path, fd);
|
|
||||||
return fd;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Direct3DRMRenderer* GXMRenderer::Create(DWORD width, DWORD height)
|
Direct3DRMRenderer* GXMRenderer::Create(DWORD width, DWORD height)
|
||||||
{
|
{
|
||||||
SDL_Log("GXMRenderer::Create width=%d height=%d", width, height);
|
SDL_Log("GXMRenderer::Create width=%d height=%d", width, height);
|
||||||
@ -577,7 +552,11 @@ GXMRenderer::GXMRenderer(
|
|||||||
DWORD width,
|
DWORD width,
|
||||||
DWORD height,
|
DWORD height,
|
||||||
GXMRendererData data
|
GXMRendererData data
|
||||||
) : m_width(width), m_height(height), m_data(data) {
|
) : m_data(data) {
|
||||||
|
m_width = width;
|
||||||
|
m_height = height;
|
||||||
|
m_virtualWidth = width;
|
||||||
|
m_virtualHeight = height;
|
||||||
m_initialized = true;
|
m_initialized = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -810,8 +789,7 @@ void GXMRenderer::GetDesc(D3DDEVICEDESC* halDesc, D3DDEVICEDESC* helDesc)
|
|||||||
memset(helDesc, 0, sizeof(D3DDEVICEDESC));
|
memset(helDesc, 0, sizeof(D3DDEVICEDESC));
|
||||||
}
|
}
|
||||||
|
|
||||||
const char* GXMRenderer::GetName()
|
const char* GXMRenderer::GetName() {
|
||||||
{
|
|
||||||
return "GXM";
|
return "GXM";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -906,6 +884,10 @@ void GXMRenderer::SubmitDraw(
|
|||||||
) {
|
) {
|
||||||
auto& mesh = m_meshes[meshId];
|
auto& mesh = m_meshes[meshId];
|
||||||
|
|
||||||
|
char marker[256];
|
||||||
|
snprintf(marker, sizeof(marker), "SubmitDraw: %d", meshId);
|
||||||
|
sceGxmPushUserMarker(this->m_data.context, marker);
|
||||||
|
|
||||||
sceGxmSetVertexProgram(this->m_data.context, this->m_data.mainVertexProgram);
|
sceGxmSetVertexProgram(this->m_data.context, this->m_data.mainVertexProgram);
|
||||||
if(this->transparencyEnabled) {
|
if(this->transparencyEnabled) {
|
||||||
sceGxmSetFragmentProgram(this->m_data.context, this->m_data.transparentFragmentProgram);
|
sceGxmSetFragmentProgram(this->m_data.context, this->m_data.transparentFragmentProgram);
|
||||||
@ -918,9 +900,14 @@ void GXMRenderer::SubmitDraw(
|
|||||||
sceGxmReserveVertexDefaultUniformBuffer(this->m_data.context, &vertUniforms);
|
sceGxmReserveVertexDefaultUniformBuffer(this->m_data.context, &vertUniforms);
|
||||||
sceGxmReserveFragmentDefaultUniformBuffer(this->m_data.context, &fragUniforms);
|
sceGxmReserveFragmentDefaultUniformBuffer(this->m_data.context, &fragUniforms);
|
||||||
|
|
||||||
SET_UNIFORM(vertUniforms, this->m_data.uModelViewMatrixParam, modelViewMatrix, mainVertexProgramGxp);
|
D3DRMMATRIX4D modelViewMatrixTrans;
|
||||||
SET_UNIFORM(vertUniforms, this->m_data.uNormalMatrixParam, normalMatrix, mainVertexProgramGxp);
|
D3DRMMATRIX4D projectionTrans;
|
||||||
SET_UNIFORM(vertUniforms, this->m_data.uProjectionMatrixParam, m_projection, mainVertexProgramGxp);
|
transpose4x4(modelViewMatrix, modelViewMatrixTrans);
|
||||||
|
transpose4x4(m_projection, projectionTrans);
|
||||||
|
|
||||||
|
SET_UNIFORM(vertUniforms, this->m_data.uModelViewMatrix, modelViewMatrixTrans, mainVertexProgramGxp);
|
||||||
|
SET_UNIFORM(vertUniforms, this->m_data.uNormalMatrix, normalMatrix, mainVertexProgramGxp);
|
||||||
|
SET_UNIFORM(vertUniforms, this->m_data.uProjectionMatrix, projectionTrans, mainVertexProgramGxp);
|
||||||
|
|
||||||
float color[4] = {
|
float color[4] = {
|
||||||
appearance.color.r / 255.0f,
|
appearance.color.r / 255.0f,
|
||||||
@ -946,6 +933,8 @@ void GXMRenderer::SubmitDraw(
|
|||||||
mesh.indexBuffer,
|
mesh.indexBuffer,
|
||||||
mesh.indexCount
|
mesh.indexCount
|
||||||
);
|
);
|
||||||
|
|
||||||
|
sceGxmPopUserMarker(this->m_data.context);
|
||||||
}
|
}
|
||||||
|
|
||||||
HRESULT GXMRenderer::FinalizeFrame() {
|
HRESULT GXMRenderer::FinalizeFrame() {
|
||||||
@ -961,6 +950,10 @@ void GXMRenderer::Resize(int width, int height, const ViewportTransform& viewpor
|
|||||||
void GXMRenderer::Clear(float r, float g, float b) {
|
void GXMRenderer::Clear(float r, float g, float b) {
|
||||||
this->StartScene();
|
this->StartScene();
|
||||||
|
|
||||||
|
char marker[256];
|
||||||
|
snprintf(marker, sizeof(marker), "Clear");
|
||||||
|
sceGxmPushUserMarker(this->m_data.context, marker);
|
||||||
|
|
||||||
sceGxmSetVertexProgram(this->m_data.context, this->m_data.clearVertexProgram);
|
sceGxmSetVertexProgram(this->m_data.context, this->m_data.clearVertexProgram);
|
||||||
sceGxmSetFragmentProgram(this->m_data.context, this->m_data.clearFragmentProgram);
|
sceGxmSetFragmentProgram(this->m_data.context, this->m_data.clearFragmentProgram);
|
||||||
|
|
||||||
@ -979,6 +972,8 @@ void GXMRenderer::Clear(float r, float g, float b) {
|
|||||||
SCE_GXM_INDEX_FORMAT_U16,
|
SCE_GXM_INDEX_FORMAT_U16,
|
||||||
this->m_data.clearIndicies, 3
|
this->m_data.clearIndicies, 3
|
||||||
);
|
);
|
||||||
|
|
||||||
|
sceGxmPopUserMarker(this->m_data.context);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GXMRenderer::Flip() {
|
void GXMRenderer::Flip() {
|
||||||
@ -1008,7 +1003,7 @@ void GXMRenderer::Flip() {
|
|||||||
this->backBufferIndex = (this->backBufferIndex + 1) % VITA_GXM_DISPLAY_BUFFER_COUNT;
|
this->backBufferIndex = (this->backBufferIndex + 1) % VITA_GXM_DISPLAY_BUFFER_COUNT;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CreateOrthoMatrix(float left, float right, float bottom, float top, D3DRMMATRIX4D& outMatrix)
|
static void CreateOrthoMatrix(float left, float right, float bottom, float top, D3DRMMATRIX4D& outMatrix)
|
||||||
{
|
{
|
||||||
float near = -1.0f;
|
float near = -1.0f;
|
||||||
float far = 1.0f;
|
float far = 1.0f;
|
||||||
@ -1040,6 +1035,10 @@ void CreateOrthoMatrix(float left, float right, float bottom, float top, D3DRMMA
|
|||||||
void GXMRenderer::Draw2DImage(Uint32 textureId, const SDL_Rect& srcRect, const SDL_Rect& dstRect) {
|
void GXMRenderer::Draw2DImage(Uint32 textureId, const SDL_Rect& srcRect, const SDL_Rect& dstRect) {
|
||||||
this->StartScene();
|
this->StartScene();
|
||||||
|
|
||||||
|
char marker[256];
|
||||||
|
snprintf(marker, sizeof(marker), "Draw2DImage: %d", textureId);
|
||||||
|
sceGxmPushUserMarker(this->m_data.context, marker);
|
||||||
|
|
||||||
sceGxmSetVertexProgram(this->m_data.context, this->m_data.mainVertexProgram);
|
sceGxmSetVertexProgram(this->m_data.context, this->m_data.mainVertexProgram);
|
||||||
sceGxmSetFragmentProgram(this->m_data.context, this->m_data.imageFragmentProgram);
|
sceGxmSetFragmentProgram(this->m_data.context, this->m_data.imageFragmentProgram);
|
||||||
|
|
||||||
@ -1057,10 +1056,11 @@ void GXMRenderer::Draw2DImage(Uint32 textureId, const SDL_Rect& srcRect, const S
|
|||||||
CreateOrthoMatrix(left, right, bottom, top, projection);
|
CreateOrthoMatrix(left, right, bottom, top, projection);
|
||||||
|
|
||||||
D3DRMMATRIX4D identity = {{1.f, 0.f, 0.f, 0.f}, {0.f, 1.f, 0.f, 0.f}, {0.f, 0.f, 1.f, 0.f}, {0.f, 0.f, 0.f, 1.f}};
|
D3DRMMATRIX4D identity = {{1.f, 0.f, 0.f, 0.f}, {0.f, 1.f, 0.f, 0.f}, {0.f, 0.f, 1.f, 0.f}, {0.f, 0.f, 0.f, 1.f}};
|
||||||
|
Matrix3x3 normal = {{1.f, 0.f, 0.f}, {0.f, 1.f, 0.f}, {0.f, 0.f, 1.f}};
|
||||||
|
|
||||||
SET_UNIFORM(vertUniforms, this->m_data.uModelViewMatrixParam, identity, mainVertexProgramGxp);
|
SET_UNIFORM(vertUniforms, this->m_data.uModelViewMatrix, identity, mainVertexProgramGxp); // float4x4
|
||||||
SET_UNIFORM(vertUniforms, this->m_data.uNormalMatrixParam, identity, mainVertexProgramGxp);
|
SET_UNIFORM(vertUniforms, this->m_data.uNormalMatrix, normal, mainVertexProgramGxp); // float3x3
|
||||||
SET_UNIFORM(vertUniforms, this->m_data.uProjectionMatrixParam, m_projection, mainVertexProgramGxp);
|
SET_UNIFORM(vertUniforms, this->m_data.uProjectionMatrix, projection, mainVertexProgramGxp); // float4x4
|
||||||
|
|
||||||
const GXMTextureCacheEntry& texture = m_textures[textureId];
|
const GXMTextureCacheEntry& texture = m_textures[textureId];
|
||||||
sceGxmSetFragmentTexture(this->m_data.context, 0, &texture.gxmTexture);
|
sceGxmSetFragmentTexture(this->m_data.context, 0, &texture.gxmTexture);
|
||||||
@ -1100,6 +1100,7 @@ void GXMRenderer::Draw2DImage(Uint32 textureId, const SDL_Rect& srcRect, const S
|
|||||||
gpuIndices, 4
|
gpuIndices, 4
|
||||||
);
|
);
|
||||||
|
|
||||||
|
sceGxmPopUserMarker(this->m_data.context);
|
||||||
sceClibMspaceFree(this->m_data.cdramPool, meshBuffer);
|
sceClibMspaceFree(this->m_data.cdramPool, meshBuffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
15
miniwin/src/d3drm/backends/gxm/shaders/Makefile
Normal file
15
miniwin/src/d3drm/backends/gxm/shaders/Makefile
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
shaders += main.frag.gxp main.vert.gxp image.frag.gxp
|
||||||
|
shaders += clear.frag.gxp clear.vert.gxp
|
||||||
|
|
||||||
|
all: $(shaders)
|
||||||
|
|
||||||
|
CGCFLAGS = -Wperf -cache -cachedir cache
|
||||||
|
|
||||||
|
cache:
|
||||||
|
mkdir -p cache
|
||||||
|
|
||||||
|
%.vert.gxp: %.vert.cg | cache
|
||||||
|
./psp2cgc.exe $(CGCFLAGS) -profile sce_vp_psp2 $< -o $@
|
||||||
|
|
||||||
|
%.frag.gxp: %.frag.cg | cache
|
||||||
|
./psp2cgc.exe $(CGCFLAGS) -profile sce_fp_psp2 $< -o $@
|
||||||
BIN
miniwin/src/d3drm/backends/gxm/shaders/cache/clear.frag_550b7e0c6c421575.sdb
vendored
Normal file
BIN
miniwin/src/d3drm/backends/gxm/shaders/cache/clear.frag_550b7e0c6c421575.sdb
vendored
Normal file
Binary file not shown.
BIN
miniwin/src/d3drm/backends/gxm/shaders/cache/clear.vert_98a2a6664d8485bc.sdb
vendored
Normal file
BIN
miniwin/src/d3drm/backends/gxm/shaders/cache/clear.vert_98a2a6664d8485bc.sdb
vendored
Normal file
Binary file not shown.
BIN
miniwin/src/d3drm/backends/gxm/shaders/cache/image.frag_ae725a8caae9bf47.sdb
vendored
Normal file
BIN
miniwin/src/d3drm/backends/gxm/shaders/cache/image.frag_ae725a8caae9bf47.sdb
vendored
Normal file
Binary file not shown.
BIN
miniwin/src/d3drm/backends/gxm/shaders/cache/main.frag_a5f9016b18a6a10c.sdb
vendored
Normal file
BIN
miniwin/src/d3drm/backends/gxm/shaders/cache/main.frag_a5f9016b18a6a10c.sdb
vendored
Normal file
Binary file not shown.
BIN
miniwin/src/d3drm/backends/gxm/shaders/cache/main.vert_02c4a0c27e7c3246.sdb
vendored
Normal file
BIN
miniwin/src/d3drm/backends/gxm/shaders/cache/main.vert_02c4a0c27e7c3246.sdb
vendored
Normal file
Binary file not shown.
@ -13,7 +13,7 @@
|
|||||||
|
|
||||||
DEFINE_GUID(GXM_GUID, 0x682656F3, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x58, 0x4D);
|
DEFINE_GUID(GXM_GUID, 0x682656F3, 0x0000, 0x0000, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x58, 0x4D);
|
||||||
|
|
||||||
#define VITA_GXM_DISPLAY_BUFFER_COUNT 2
|
#define VITA_GXM_DISPLAY_BUFFER_COUNT 3
|
||||||
|
|
||||||
struct GXMTextureCacheEntry {
|
struct GXMTextureCacheEntry {
|
||||||
IDirect3DRMTexture* texture;
|
IDirect3DRMTexture* texture;
|
||||||
@ -103,9 +103,9 @@ typedef struct GXMRendererData {
|
|||||||
SceGxmFragmentProgram* imageFragmentProgram; // 2d images, no lighting
|
SceGxmFragmentProgram* imageFragmentProgram; // 2d images, no lighting
|
||||||
|
|
||||||
// main shader vertex uniforms
|
// main shader vertex uniforms
|
||||||
const SceGxmProgramParameter* uModelViewMatrixParam;
|
const SceGxmProgramParameter* uModelViewMatrix;
|
||||||
const SceGxmProgramParameter* uNormalMatrixParam;
|
const SceGxmProgramParameter* uNormalMatrix;
|
||||||
const SceGxmProgramParameter* uProjectionMatrixParam;
|
const SceGxmProgramParameter* uProjectionMatrix;
|
||||||
|
|
||||||
// main shader fragment uniforms
|
// main shader fragment uniforms
|
||||||
const SceGxmProgramParameter* uLights;
|
const SceGxmProgramParameter* uLights;
|
||||||
@ -171,7 +171,6 @@ class GXMRenderer : public Direct3DRMRenderer {
|
|||||||
std::vector<GXMTextureCacheEntry> m_textures;
|
std::vector<GXMTextureCacheEntry> m_textures;
|
||||||
std::vector<GXMMeshCacheEntry> m_meshes;
|
std::vector<GXMMeshCacheEntry> m_meshes;
|
||||||
D3DRMMATRIX4D m_projection;
|
D3DRMMATRIX4D m_projection;
|
||||||
DWORD m_width, m_height;
|
|
||||||
std::vector<SceneLight> m_lights;
|
std::vector<SceneLight> m_lights;
|
||||||
|
|
||||||
bool transparencyEnabled = false;
|
bool transparencyEnabled = false;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user