Jump to content

  • Log In with Google      Sign In   
  • Create Account

14 years ago on June 15th Gamedev.net was first launched! We want to thank all of you for being part of our community and hope the best years are ahead of us. Happy birthday Gamedev.net!

#Actuald0nuts

Posted 21 January 2013 - 04:36 PM

Opengl novice here so sorry ahead of time! Just hoping to get some questions answered about sampling textures. I was messing around with rendering a scene to textures so that they could be used later. I then wanted to make a shader to view a depth texture by linearizing the depth values and then just bliting it on screen using a single quad. I can see that everything is being drawn into the texture correctly through gDEBugger (debugger.png) but am having some trouble sampling it .

 

First, to render the texture I output a single quad covering the screen. Then in vertex shader I multiply by modelviewproj matrix and save the xy value. My understanding is this should perfectly match the screen coordinates but when I check these values I am only getting the top right corner (output.png). 

 

Second, I always seem to get values of 0 when sampling my texture. I can see in the debugger data view that (0,0) has a value of like ~.9997. However I sample it, I always seem to get 0s. It is a floating point texture with GL_DEPTH_ATTACHMENT.

 

Here's the fragment and vertex shader code (my graphics card doesn't have geometry shader):

 

 


ShadowVisualDataOutput ShadowVisualVertexMain(ShadowVisualDataInput vdi, uniform float4x4 modelViewProj) {
  ShadowVisualDataOutput ret;
  ret.projv = mul(modelViewProj, vdi.vertex); 
  ret.saved = mul(modelViewProj, vdi.vertex).xy;
  return ret;
}


ShadowVisualDataPixelOutput ShadowVisualFragmentMain(
	ShadowVisualDataOutput pdi, 
	uniform sampler2D depthTex,
	uniform float camNear, 
	uniform float camFar) {
		
	ShadowVisualDataPixelOutput ret;	
	if (pdi.saved.x < 0 || pdi.saved.x > 720) {
		ret.color = float4(0,0,1,1);
		return ret;
	}
	if (pdi.saved.y < 0 || pdi.saved.y > 480) {
		ret.color = float4(0,0,1,1);
		return ret;
	}	

	float2 lookup = float2(0, 0);
	float depth = tex2D(depthTex, lookup).x;
	if (depth == 0.0f) {
			ret.color = float4(0,0,0,0);
			return ret;
	}

	ret.color = float4(1,1,1,1);
	return ret;

}

 

 

Thanks for any help ahead of time smile.png


#3d0nuts

Posted 21 January 2013 - 11:54 AM

Opengl novice here so sorry ahead of time! Just hoping to get some questions answered about sampling textures. I was messing around with rendering a scene to textures so that they could be used later. I then wanted to make a shader view a depth texture by linearizing the depth values and then just bliting it on screen using a single quad. I can see that everything is being drawn into the texture correctly through gDEBugger (debugger.png) but am having some trouble sampling it .

 

First, to render the texture I output a single quad covering the screen. Then in vertex shader I multiply by modelviewproj matrix and save the xy value. My understanding is this should perfectly match the screen coordinates but when I check these values I am only getting the top right corner (output.png). 

 

Second, I always seem to get values of 0 when sampling my texture. I can see in the debugger data view that (0,0) has a value of like ~.9997. However I sample it, I always seem to get 0s. It is a floating point texture with GL_DEPTH_ATTACHMENT.

 

Here's the fragment and vertex shader code (my graphics card doesn't have geometry shader):

 

 


ShadowVisualDataOutput ShadowVisualVertexMain(ShadowVisualDataInput vdi, uniform float4x4 modelViewProj) {
  ShadowVisualDataOutput ret;
  ret.projv = mul(modelViewProj, vdi.vertex); 
  ret.saved = mul(modelViewProj, vdi.vertex).xy;
  return ret;
}


ShadowVisualDataPixelOutput ShadowVisualFragmentMain(
	ShadowVisualDataOutput pdi, 
	uniform sampler2D depthTex,
	uniform float camNear, 
	uniform float camFar) {
		
	ShadowVisualDataPixelOutput ret;	
	if (pdi.saved.x < 0 || pdi.saved.x > 720) {
		ret.color = float4(0,0,1,1);
		return ret;
	}
	if (pdi.saved.y < 0 || pdi.saved.y > 480) {
		ret.color = float4(0,0,1,1);
		return ret;
	}	

	float2 lookup = float2(0, 0);
	float depth = tex2D(depthTex, lookup).x;
	if (depth == 0.0f) {
			ret.color = float4(0,0,0,0);
			return ret;
	}

	ret.color = float4(1,1,1,1);
	return ret;

}

 

 

Thanks for any help ahead of time smile.png


#2d0nuts

Posted 21 January 2013 - 11:52 AM

Opengl novice here so sorry ahead of time! Just hoping to get some questions answered about sampling textures. I was messing around with rendering a scene to textures so that they could be used later. I then wanted to make a shader to linearize a depth texture on blit it on screen using a single quad. I can see that everything is being drawn into the texture correctly through gDEBugger (debugger.png) but am having some trouble sampling it .

 

First, to render the texture I output a single quad covering the screen. Then in vertex shader I multiply by modelviewproj matrix and save the xy value. My understanding is this should perfectly match the screen coordinates but when I check these values I am only getting the top right corner (output.png). 

 

Second, I always seem to get values of 0 when sampling my texture. I can see in the debugger data view that (0,0) has a value of like ~.9997. However I sample it, I always seem to get 0s. It is a floating point texture with GL_DEPTH_ATTACHMENT.

 

Here's the fragment and vertex shader code (my graphics card doesn't have geometry shader):

 

 


ShadowVisualDataOutput ShadowVisualVertexMain(ShadowVisualDataInput vdi, uniform float4x4 modelViewProj) {
  ShadowVisualDataOutput ret;
  ret.projv = mul(modelViewProj, vdi.vertex); 
  ret.saved = mul(modelViewProj, vdi.vertex).xy;
  return ret;
}


ShadowVisualDataPixelOutput ShadowVisualFragmentMain(
	ShadowVisualDataOutput pdi, 
	uniform sampler2D depthTex,
	uniform float camNear, 
	uniform float camFar) {
		
	ShadowVisualDataPixelOutput ret;	
	if (pdi.saved.x < 0 || pdi.saved.x > 720) {
		ret.color = float4(0,0,1,1);
		return ret;
	}
	if (pdi.saved.y < 0 || pdi.saved.y > 480) {
		ret.color = float4(0,0,1,1);
		return ret;
	}	

	float2 lookup = float2(0, 0);
	float depth = tex2D(depthTex, lookup).x;
	if (depth == 0.0f) {
			ret.color = float4(0,0,0,0);
			return ret;
	}

	ret.color = float4(1,1,1,1);
	return ret;

}

 

 

Thanks for any help ahead of time smile.png


#1d0nuts

Posted 21 January 2013 - 11:27 AM

Opengl novice here so sorry ahead of time! Just hoping to get some questions answered about using sampling textures. I was messing around with rendering a scene to textures so that they could be used later. I then wanted to make a shader to linearize a depth texture on blit it on screen using a single quad. I can see that everything is being drawn into the texture correctly through gDEBugger (debugger.png) but am having some trouble sampling it .

 

First, to render the texture I output a single quad covering the screen. Then in vertex shader I multiply by modelviewproj matrix and save the xy value. My understanding is this should perfectly match the screen coordinates but when I check these values I am only getting the top right corner (output.png). 

 

Second, I always seem to get values of 0 when sampling my texture. I can see in the debugger data view that (0,0) has a value of like ~.9997. However I sample it, I always seem to get 0s. It is a floating point texture with GL_DEPTH_ATTACHMENT.

 

Here's the fragment and vertex shader code (my graphics card doesn't have geometry shader):

 

 


ShadowVisualDataOutput ShadowVisualVertexMain(ShadowVisualDataInput vdi, uniform float4x4 modelViewProj) {
  ShadowVisualDataOutput ret;
  ret.projv = mul(modelViewProj, vdi.vertex); 
  ret.saved = mul(modelViewProj, vdi.vertex).xy;
  return ret;
}


ShadowVisualDataPixelOutput ShadowVisualFragmentMain(
	ShadowVisualDataOutput pdi, 
	uniform sampler2D depthTex,
	uniform float camNear, 
	uniform float camFar) {
		
	ShadowVisualDataPixelOutput ret;	
	if (pdi.saved.x < 0 || pdi.saved.x > 720) {
		ret.color = float4(0,0,1,1);
		return ret;
	}
	if (pdi.saved.y < 0 || pdi.saved.y > 480) {
		ret.color = float4(0,0,1,1);
		return ret;
	}	

	float2 lookup = float2(0, 0);
	float depth = tex2D(depthTex, lookup).x;
	if (depth == 0.0f) {
			ret.color = float4(0,0,0,0);
			return ret;
	}

	ret.color = float4(1,1,1,1);
	return ret;

}

 

 

Thanks for any help ahead of time :)

 


PARTNERS