diff --git a/src/operators/output/customRender.tox b/src/operators/output/customRender.tox index d7c57ea0a..32222768e 100644 Binary files a/src/operators/output/customRender.tox and b/src/operators/output/customRender.tox differ diff --git a/src/operators/output/customRender.yaml b/src/operators/output/customRender.yaml index 383bb3c6e..949246848 100644 --- a/src/operators/output/customRender.yaml +++ b/src/operators/output/customRender.yaml @@ -1,7 +1,7 @@ !rop meta: !meta opType: raytk.operators.output.customRender - opVersion: '18' + opVersion: '19' opStatus: alpha paramPages: - !page @@ -192,6 +192,11 @@ opDef: !def callbacks: !text file: src/operators/output/customRender.py name: customRender + macroTable: !table + file: src/operators/output/customRender_macros.txt + name: macro_exprs + evaluate: true + evalOpts: !evalOpts {} displayCategory: Render inputs: - !input diff --git a/src/operators/output/customRender_body.glsl b/src/operators/output/customRender_body.glsl index 9b7435337..d506dfcd7 100644 --- a/src/operators/output/customRender_body.glsl +++ b/src/operators/output/customRender_body.glsl @@ -4,6 +4,21 @@ void main() { #endif initOutputs(); + CustomRenderInputs inputs; + inputs.uvPos = vec3(vUV.st, 0.); + inputs.resolution = vec3(uTDOutputInfo.res.zw, 1.); + #if defined(RAYTK_OUTPUT_TEXTURE_2D) + #elif defined(RAYTK_OUTPUT_TEXTURE_3D) + inputs.uvPos.z = uTDOutputInfo.depth.z; // depth offset + inputs.resolution.z = int(uTDOutputInfo.depth.y); // depth + #elif defined(RAYTK_OUTPUT_TEXTURE_2D_ARRAY) + inputs.resolution.z = int(uTDOutputInfo.depth.y); + if (inputs.resolution.z > 1) { + inputs.uvPos.z = uTDOutputInfo.depth.z / (inputs.resolution.z - 1.0); + } + #endif + inputs.pixelPos = ivec3(inputs.uvPos * inputs.resolution); + vec2 resolution = uTDOutputInfo.res.zw; vec2 fragCoord = vUV.st;//*resolution; fragCoord.x *= uTDOutputInfo.res.z/uTDOutputInfo.res.w; @@ -13,5 +28,5 @@ void main() { Context ctx = createDefaultContext(); - customMain(fragCoord, p, ctx); + customMain(inputs, ctx); } \ No newline at end of file diff --git a/src/operators/output/customRender_defaultMainCode.glsl b/src/operators/output/customRender_defaultMainCode.glsl index 4860621cb..f65874f01 100644 --- a/src/operators/output/customRender_defaultMainCode.glsl +++ b/src/operators/output/customRender_defaultMainCode.glsl @@ -1,4 +1,5 @@ -void customMain(vec2 fragCoord, vec2 p, Context ctx) { +void customMain(CustomRenderInputs inputs, Context ctx) { + vec2 p = inputs.uvPos.xy * vec2(2.) - vec2(1.); vec4 res1 = fillToVec4(inputOp1(p, ctx)); #ifdef OUTPUT_COLOR colorOut = TDOutputSwizzle(res1); diff --git a/src/operators/output/customRender_macros.txt b/src/operators/output/customRender_macros.txt new file mode 100644 index 000000000..1eb0f663e --- /dev/null +++ b/src/operators/output/customRender_macros.txt @@ -0,0 +1,3 @@ +int(parent().par.Type == 'texture2d') 'RAYTK_OUTPUT_TEXTURE_2D' '' +int(parent().par.Type == 'texture3d') 'RAYTK_OUTPUT_TEXTURE_3D' '' +int(parent().par.Type == 'texture2darray') 'RAYTK_OUTPUT_TEXTURE_2D_ARRAY' '' diff --git a/src/operators/output/customRender_predeclarations.glsl b/src/operators/output/customRender_predeclarations.glsl new file mode 100644 index 000000000..543fe8763 --- /dev/null +++ b/src/operators/output/customRender_predeclarations.glsl @@ -0,0 +1,5 @@ +struct CustomRenderInputs { + ivec3 pixelPos; + vec3 uvPos; + vec3 resolution; +}; diff --git a/tests/testCases/operators/output/customRender_test.tox b/tests/testCases/operators/output/customRender_test.tox index 1544433cd..5636eca9e 100644 Binary files a/tests/testCases/operators/output/customRender_test.tox and b/tests/testCases/operators/output/customRender_test.tox differ