mirror of
https://github.com/isledecomp/isle-portable.git
synced 2026-01-13 11:11:15 +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_HEIGHT 544
|
||||
#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_PIXEL_FORMAT SCE_DISPLAY_PIXELFORMAT_A8B8G8R8
|
||||
@ -41,11 +41,11 @@ typedef struct Vertex {
|
||||
} Vertex;
|
||||
|
||||
|
||||
INCBIN(main_vert_gxp, "main.vert.gxp");
|
||||
INCBIN(main_frag_gxp, "main.frag.gxp");
|
||||
INCBIN(clear_vert_gxp, "clear.vert.gxp");
|
||||
INCBIN(clear_frag_gxp, "clear.frag.gxp");
|
||||
INCBIN(image_frag_gxp, "image.frag.gxp");
|
||||
INCBIN(main_vert_gxp, "shaders/main.vert.gxp");
|
||||
INCBIN(main_frag_gxp, "shaders/main.frag.gxp");
|
||||
INCBIN(clear_vert_gxp, "shaders/clear.vert.gxp");
|
||||
INCBIN(clear_frag_gxp, "shaders/clear.frag.gxp");
|
||||
INCBIN(image_frag_gxp, "shaders/image.frag.gxp");
|
||||
|
||||
const SceGxmProgram* mainVertexProgramGxp = (const SceGxmProgram*)_inc_main_vert_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
|
||||
if(SCE_ERR(sceGxmShaderPatcherCreateFragmentProgram,
|
||||
data->shaderPatcher,
|
||||
data->mainFragmentProgramId,
|
||||
data->imageFragmentProgramId,
|
||||
SCE_GXM_OUTPUT_REGISTER_FORMAT_UCHAR4,
|
||||
SCE_GXM_MULTISAMPLE_NONE,
|
||||
&blendInfoTransparent,
|
||||
@ -490,9 +490,9 @@ static bool create_gxm_renderer(int width, int height, GXMRendererData* data) {
|
||||
)) return false;
|
||||
|
||||
// vertex uniforms
|
||||
data->uModelViewMatrixParam = sceGxmProgramFindParameterByName(mainVertexProgramGxp, "uModelViewMatrix");
|
||||
data->uNormalMatrixParam = sceGxmProgramFindParameterByName(mainVertexProgramGxp, "uNormalMatrix");
|
||||
data->uProjectionMatrixParam = sceGxmProgramFindParameterByName(mainVertexProgramGxp, "uProjectionMatrix");
|
||||
data->uModelViewMatrix = sceGxmProgramFindParameterByName(mainVertexProgramGxp, "uModelViewMatrix");
|
||||
data->uNormalMatrix = sceGxmProgramFindParameterByName(mainVertexProgramGxp, "uNormalMatrix");
|
||||
data->uProjectionMatrix = sceGxmProgramFindParameterByName(mainVertexProgramGxp, "uProjectionMatrix");
|
||||
|
||||
// fragment uniforms
|
||||
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)
|
||||
{
|
||||
SDL_Log("GXMRenderer::Create width=%d height=%d", width, height);
|
||||
@ -577,7 +552,11 @@ GXMRenderer::GXMRenderer(
|
||||
DWORD width,
|
||||
DWORD height,
|
||||
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;
|
||||
}
|
||||
|
||||
@ -810,8 +789,7 @@ void GXMRenderer::GetDesc(D3DDEVICEDESC* halDesc, D3DDEVICEDESC* helDesc)
|
||||
memset(helDesc, 0, sizeof(D3DDEVICEDESC));
|
||||
}
|
||||
|
||||
const char* GXMRenderer::GetName()
|
||||
{
|
||||
const char* GXMRenderer::GetName() {
|
||||
return "GXM";
|
||||
}
|
||||
|
||||
@ -906,6 +884,10 @@ void GXMRenderer::SubmitDraw(
|
||||
) {
|
||||
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);
|
||||
if(this->transparencyEnabled) {
|
||||
sceGxmSetFragmentProgram(this->m_data.context, this->m_data.transparentFragmentProgram);
|
||||
@ -918,9 +900,14 @@ void GXMRenderer::SubmitDraw(
|
||||
sceGxmReserveVertexDefaultUniformBuffer(this->m_data.context, &vertUniforms);
|
||||
sceGxmReserveFragmentDefaultUniformBuffer(this->m_data.context, &fragUniforms);
|
||||
|
||||
SET_UNIFORM(vertUniforms, this->m_data.uModelViewMatrixParam, modelViewMatrix, mainVertexProgramGxp);
|
||||
SET_UNIFORM(vertUniforms, this->m_data.uNormalMatrixParam, normalMatrix, mainVertexProgramGxp);
|
||||
SET_UNIFORM(vertUniforms, this->m_data.uProjectionMatrixParam, m_projection, mainVertexProgramGxp);
|
||||
D3DRMMATRIX4D modelViewMatrixTrans;
|
||||
D3DRMMATRIX4D projectionTrans;
|
||||
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] = {
|
||||
appearance.color.r / 255.0f,
|
||||
@ -946,6 +933,8 @@ void GXMRenderer::SubmitDraw(
|
||||
mesh.indexBuffer,
|
||||
mesh.indexCount
|
||||
);
|
||||
|
||||
sceGxmPopUserMarker(this->m_data.context);
|
||||
}
|
||||
|
||||
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) {
|
||||
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);
|
||||
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,
|
||||
this->m_data.clearIndicies, 3
|
||||
);
|
||||
|
||||
sceGxmPopUserMarker(this->m_data.context);
|
||||
}
|
||||
|
||||
void GXMRenderer::Flip() {
|
||||
@ -1008,7 +1003,7 @@ void GXMRenderer::Flip() {
|
||||
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 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) {
|
||||
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);
|
||||
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);
|
||||
|
||||
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.uNormalMatrixParam, identity, mainVertexProgramGxp);
|
||||
SET_UNIFORM(vertUniforms, this->m_data.uProjectionMatrixParam, m_projection, mainVertexProgramGxp);
|
||||
SET_UNIFORM(vertUniforms, this->m_data.uModelViewMatrix, identity, mainVertexProgramGxp); // float4x4
|
||||
SET_UNIFORM(vertUniforms, this->m_data.uNormalMatrix, normal, mainVertexProgramGxp); // float3x3
|
||||
SET_UNIFORM(vertUniforms, this->m_data.uProjectionMatrix, projection, mainVertexProgramGxp); // float4x4
|
||||
|
||||
const GXMTextureCacheEntry& texture = m_textures[textureId];
|
||||
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
|
||||
);
|
||||
|
||||
sceGxmPopUserMarker(this->m_data.context);
|
||||
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 VITA_GXM_DISPLAY_BUFFER_COUNT 2
|
||||
#define VITA_GXM_DISPLAY_BUFFER_COUNT 3
|
||||
|
||||
struct GXMTextureCacheEntry {
|
||||
IDirect3DRMTexture* texture;
|
||||
@ -103,9 +103,9 @@ typedef struct GXMRendererData {
|
||||
SceGxmFragmentProgram* imageFragmentProgram; // 2d images, no lighting
|
||||
|
||||
// main shader vertex uniforms
|
||||
const SceGxmProgramParameter* uModelViewMatrixParam;
|
||||
const SceGxmProgramParameter* uNormalMatrixParam;
|
||||
const SceGxmProgramParameter* uProjectionMatrixParam;
|
||||
const SceGxmProgramParameter* uModelViewMatrix;
|
||||
const SceGxmProgramParameter* uNormalMatrix;
|
||||
const SceGxmProgramParameter* uProjectionMatrix;
|
||||
|
||||
// main shader fragment uniforms
|
||||
const SceGxmProgramParameter* uLights;
|
||||
@ -171,7 +171,6 @@ class GXMRenderer : public Direct3DRMRenderer {
|
||||
std::vector<GXMTextureCacheEntry> m_textures;
|
||||
std::vector<GXMMeshCacheEntry> m_meshes;
|
||||
D3DRMMATRIX4D m_projection;
|
||||
DWORD m_width, m_height;
|
||||
std::vector<SceneLight> m_lights;
|
||||
|
||||
bool transparencyEnabled = false;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user