# Incorrect 3D depth testing when using render target, why? (SOLVED)

**URL:** <https://forum.defold.com/t/incorrect-3d-depth-testing-when-using-render-target-why-solved/9108>\
**Category:** Questions\
**Created:** [June 12, 2017, 1:49am UTC](https://forum.defold.com/t/incorrect-3d-depth-testing-when-using-render-target-why-solved/9108 "2017-06-12T01:49:15Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![sergey.lerg](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/sergey.lerg/32/3970_2.png) [@sergey.lerg](https://forum.defold.com/u/sergey.lerg)\
**Post date:** [June 12, 2017, 1:49am UTC](https://forum.defold.com/t/incorrect-3d-depth-testing-when-using-render-target-why-solved/9108/1 "2017-06-12T01:49:15Z")

</div>

Hi,

So I set up my rendering pipeline to render 3D objects, all works fine, except when I want to add some post processing. I modify the script according to the grading tutorial, but my meshes are rendered incorrectly this way and I can’t understand why.

At this point postprocessing is just copying the original.

Postprocessing disabled (correct look).

 ![](https://forum-defold-uploads.b-cdn.net/original/2X/b/b3490be486a4fc03e7bf520a0f1568ffdc860f3c.png)

Postprocessing enabled (incorrect look).

 ![](https://forum-defold-uploads.b-cdn.net/original/2X/4/48a5f7eaf33ee7566967309d492c9d5af941d71c.png)

Notice how grey buildings are messed up and how trees are behind the ground they are standing on.

Here is my render script.

```lua
local camera = require('libs.camera')
local hashed = require('libs.hashed')

function init(self)
	camera.width = render.get_window_width()
	camera.height = render.get_window_height()
    
	self.gui_pred = render.predicate({'gui'})
	self.model_pred = render.predicate({'model'})
	self.background_pred = render.predicate({'background'})
	self.postprocessing_pred = render.predicate({'postprocessing'})

	self.clear_color = vmath.vector4(0, 0, 0, 0)
	self.clear_color.x = sys.get_config('render.clear_color_red', 0)
	self.clear_color.y = sys.get_config('render.clear_color_green', 0)
	self.clear_color.z = sys.get_config('render.clear_color_blue', 0)
	self.clear_color.w = sys.get_config('render.clear_color_alpha', 0)

	self.view = vmath.matrix4()

	local target_params = {
		[render.BUFFER_COLOR_BIT] = {
			format = render.FORMAT_RGBA,
			width = render.get_width(),
			height = render.get_height()
		}
	}

	self.target = render.render_target('original', target_params)
end

function update(self)
	render.enable_render_target(self.target)
	
	render.enable_state(render.STATE_DEPTH_TEST)
	render.set_depth_mask(true)
	render.clear({[render.BUFFER_COLOR_BIT] = self.clear_color, [render.BUFFER_DEPTH_BIT] = 1, [render.BUFFER_STENCIL_BIT] = 0})
	render.set_viewport(0, 0, render.get_window_width(), render.get_window_height())

	-- Render 2D space.
	render.set_view(self.view)
	render.set_projection(vmath.matrix4_orthographic(0, render.get_window_width(), 0, render.get_window_height(), -1, 1))
	render.draw(self.background_pred)
    
    -- Create an orbit camera.
	local camera_boom = vmath.vector3(0, 0, camera.distance)
	local camera_rotation = vmath.quat_rotation_y(-camera.alpha) * vmath.quat_rotation_x(camera.beta)
	local camera_position = camera.target + vmath.rotate(camera_rotation, camera_boom)
	local camera_up = vmath.rotate(camera_rotation, vmath.vector3(0,1,0))
	local view_mtx = vmath.matrix4_look_at(camera_position, camera.target, camera_up)
	render.set_view(view_mtx)
	local ortho_w = camera.view_width
	local ortho_h = ortho_w * render.get_window_height() / render.get_window_width()
	local projection_mtx = vmath.matrix4_orthographic(-ortho_w, ortho_w, -ortho_h, ortho_h, 1, 1000)
	render.set_projection(projection_mtx)
	camera.view = view_mtx
	camera.projection = projection_mtx
	camera.width = render.get_window_width()
	camera.height = render.get_window_height()
    
	-- Render 3D space.
	--render.enable_state(render.STATE_DEPTH_TEST)
	--render.set_depth_mask(true)
	render.enable_state(render.STATE_CULL_FACE)
	render.draw(self.model_pred)
	--render.draw_debug3d()
	render.disable_state(render.STATE_CULL_FACE)
	render.disable_state(render.STATE_DEPTH_TEST)
	render.set_depth_mask(false)

	render.disable_render_target(self.target)
    
	-- Postprocessing.
	render.clear({[render.BUFFER_COLOR_BIT] = self.clear_color})

	render.set_viewport(0, 0, render.get_window_width(), render.get_window_height())
	render.set_view(vmath.matrix4())
	render.set_projection(vmath.matrix4())

	render.enable_texture(0, self.target, render.BUFFER_COLOR_BIT)
	render.draw(self.postprocessing_pred)
	render.disable_texture(0, self.target)
end

function on_message(self, message_id, message)
	if message_id == hashed.clear_color then
		self.clear_color = message.color
	end
end

```

I’d appreciate the help.  
Thanks.

---

<div class="post-metadata">

**Author:** ![sven](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/sven/32/1086_2.png) [@sven](https://forum.defold.com/u/sven)\
**Post date:** [June 12, 2017, 7:21am UTC](https://forum.defold.com/t/incorrect-3d-depth-testing-when-using-render-target-why-solved/9108/2 "2017-06-12T07:21:58Z")

</div>

I think you just are missing a depth buffer in your render target! 🙂  
Have a look here: [API reference (Render)](https://www.defold.com/ref/render/#render.render_target:name-parameters)  
So, something like this in your case:

```lua
	local target_params = {
		[render.BUFFER_COLOR_BIT] = {
			format = render.FORMAT_RGBA,
			width = render.get_width(),
			height = render.get_height()
		},
		[render.BUFFER_DEPTH_BIT] = {
			format = render.FORMAT_DEPTH,
			width = render.get_width(),
			height = render.get_height()
		}
	}

	self.target = render.render_target('original', target_params)

```

---

<div class="post-metadata">

**Author:** ![sergey.lerg](https://forum-defold.b-cdn.net/user_avatar/forum.defold.com/sergey.lerg/32/3970_2.png) [@sergey.lerg](https://forum.defold.com/u/sergey.lerg)\
**Post date:** [June 12, 2017, 10:37am UTC](https://forum.defold.com/t/incorrect-3d-depth-testing-when-using-render-target-why-solved/9108/3 "2017-06-12T10:37:19Z")

</div>

Thanks, Sven! That indeed fixes everything.
