Re: [Opensg-users] OpenSG2: Accumulated changes... part 3: texture

2017-01-24 Thread Carsten Neumann
Hello Johannes,

On 2017-01-23 02:05, Johannes wrote:
> On 21.01.2017 00:01, Carsten Neumann wrote:
>> Can you adjust the changes to TextureBuffer/LayeredTextureBuffer
>> to be in line with the above? Thanks!
>
> here we go :-)

thank you. It appears this in a small way depends on the GL changes in 
part 5 though? I've added the missing function pointer type for 
glFramebufferTextureLayer to OSGGLFuncProtos.h to make it independent of 
that change. Thanks again,

Cheers,
Carsten

--
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
___
Opensg-users mailing list
Opensg-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensg-users


Re: [Opensg-users] OpenSG2: Accumulated changes... part 3: texture

2017-01-23 Thread Johannes

Hello Carsten,

On 21.01.2017 00:01, Carsten Neumann wrote:
> Can you adjust the changes to TextureBuffer/LayeredTextureBuffer
> to be in line with the above? Thanks!

here we go :-)

Best Johannes


diff -rupN ./opensg_org/Source/System/State/Base/OSGTextureObjChunk.cpp 
./opensg_texture/Source/System/State/Base/OSGTextureObjChunk.cpp
--- ./opensg_org/Source/System/State/Base/OSGTextureObjChunk.cpp
2017-01-16 11:34:55.022138400 +0100
+++ ./opensg_texture/Source/System/State/Base/OSGTextureObjChunk.cpp
2016-09-26 12:15:54.703999700 +0200
@@ -480,7 +480,8 @@ void TextureObjChunk::handleTexture(Wind
 }
 
 if((imgtarget == GL_TEXTURE_1D_ARRAY ||
-imgtarget == GL_TEXTURE_2D_ARRAY  )  &&
+imgtarget == GL_TEXTURE_2D_ARRAY ||
+imgtarget == GL_TEXTURE_CUBE_MAP_ARRAY)  &&
!win->hasExtOrVersion(_extTextureArray, 0x0300))
 {
 FWARNING(("texture arrays not supported on Window %p!\n",
@@ -596,18 +597,21 @@ void TextureObjChunk::handleTexture(Wind
 glTexParameteri(paramtarget, GL_TEXTURE_MAG_FILTER, 
getMagFilter());
 glTexParameteri(paramtarget, GL_TEXTURE_WRAP_S, getWrapS());
 
-if(paramtarget == GL_TEXTURE_2D   ||
-   paramtarget == GL_TEXTURE_2D_ARRAY ||
-   paramtarget == GL_TEXTURE_3D   ||
-   paramtarget == GL_TEXTURE_CUBE_MAP_ARB ||
-   paramtarget == GL_TEXTURE_RECTANGLE_ARB )
+if(paramtarget == GL_TEXTURE_2D ||
+   paramtarget == GL_TEXTURE_2D_ARRAY   ||
+   paramtarget == GL_TEXTURE_3D ||
+   paramtarget == GL_TEXTURE_CUBE_MAP_ARB   ||
+   paramtarget == GL_TEXTURE_CUBE_MAP_ARRAY ||
+   paramtarget == GL_TEXTURE_RECTANGLE_ARB   )
 {
 glTexParameteri(paramtarget, GL_TEXTURE_WRAP_T, getWrapT());
 }
 
-if(paramtarget == GL_TEXTURE_2D_ARRAY ||
-   paramtarget == GL_TEXTURE_3D   ||
-   paramtarget == GL_TEXTURE_CUBE_MAP_ARB  )
+if(paramtarget == GL_TEXTURE_2D_ARRAY   ||
+   paramtarget == GL_TEXTURE_3D ||
+   paramtarget == GL_TEXTURE_CUBE_MAP_ARB   ||
+   paramtarget == GL_TEXTURE_CUBE_MAP_ARRAY  )
+   
 {
 glTexParameteri(paramtarget, GL_TEXTURE_WRAP_R, getWrapR());
 }
@@ -748,6 +752,7 @@ void TextureObjChunk::handleTexture(Wind
 break;
 case GL_TEXTURE_3D:
 case GL_TEXTURE_2D_ARRAY:
+case GL_TEXTURE_CUBE_MAP_ARRAY:
 osgGlCompressedTexImage3D(
 imgtarget, 
 i - baseLevel, 
@@ -802,6 +807,7 @@ void TextureObjChunk::handleTexture(Wind
 break;
 case GL_TEXTURE_3D:
 case GL_TEXTURE_2D_ARRAY:
+case GL_TEXTURE_CUBE_MAP_ARRAY:
 osgGlTexImage3D(imgtarget, 
 i - baseLevel, 
 internalFormat,
@@ -1124,6 +1130,7 @@ void TextureObjChunk::handleTexture(Wind
break;
case GL_TEXTURE_3D:
case GL_TEXTURE_2D_ARRAY:
+   case GL_TEXTURE_CUBE_MAP_ARRAY:
osgGlCompressedTexImage3D(imgtarget, 0, 
  internalFormat,
  osgNextPower2(width),
@@ -1192,6 +1199,7 @@ void TextureObjChunk::handleTexture(Wind
break;
case GL_TEXTURE_3D:
case GL_TEXTURE_2D_ARRAY:
+   case GL_TEXTURE_CUBE_MAP_ARRAY:
osgGlTexImage3D(imgtarget, 
0, 
internalFormat,
@@ -1269,6 +1277,7 @@ void TextureObjChunk::handleTexture(Wind
 break;
 case GL_TEXTURE_3D:
 case GL_TEXTURE_2D_ARRAY:
+case GL_TEXTURE_CUBE_MAP_ARRAY:
 osgGlCompressedTexImage3D(imgtarget, 0, 
   internalFormat,
   width, height, depth, 
@@ -1315,6 +1324,7 @@ void TextureObjChunk::handleTexture(Wind
 break;
 case GL_TEXTURE_3D:
 case 

Re: [Opensg-users] OpenSG2: Accumulated changes... part 3: texture

2017-01-20 Thread Carsten Neumann
Hello Johannes,

On 2017-01-20 03:45, Johannes wrote:
> I have reread these articles and I now tend to agree with you wrt to the
> LayeredTextureBuffer. However, the GL_TEXTURE_CUBE_MAP_ARRAY is missing
> nevertheless (?)

yes, looks like it is missing. I think it should make use of 
glFramebufferTexture for the cubemap array case though.

> This stuff is not easy to grasp. Most important for me is that I have
> the OpenSG primitives at hand that I need to translate my plain OpenGL
> shadow implementation into OpenSG land.

I think OSG::TextureBuffer is the one that should use 
glFramebufferTextureLayer (for cubemap array and similar cases) to make 
non-layer attachments. To me that seems in line with it's other uses 
where it binds a plain 2D image as the attachment.
Since you have a use case for these, you are likely in a much better 
position to verify changes. Can you adjust the changes to 
TextureBuffer/LayeredTextureBuffer to be in line with the above? Thanks!

Cheers,
Carsten

--
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
___
Opensg-users mailing list
Opensg-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensg-users


Re: [Opensg-users] OpenSG2: Accumulated changes... part 3: texture

2017-01-20 Thread Johannes
Hello Carsten,

first off, I'm not an expert with textures. First I will show you how I 
initialize my shadow maps in my plain OpenGL example. So that you 
understand what I want to map into OpenSG land.

Example: [1]

Next the sources I have studied:
https://www.khronos.org/opengl/wiki/Framebuffer_Object
https://www.khronos.org/opengl/wiki/Geometry_Shader#Layered_rendering

https://www.opengl.org/sdk/docs/man/html/glFramebufferTextureLayer.xhtml
https://www.opengl.org/sdk/docs/man/html/glFramebufferTexture.xhtml


I have reread these articles and I now tend to agree with you wrt to the 
LayeredTextureBuffer. However, the GL_TEXTURE_CUBE_MAP_ARRAY is missing 
nevertheless (?)

This stuff is not easy to grasp. Most important for me is that I have 
the OpenSG primitives at hand that I need to translate my plain OpenGL 
shadow implementation into OpenSG land.

Best,
Johannes


[1]
void OpenGLWindow::InitializeShadowFBO()
{
 if (_shadow_casters_point > 0)
 {
 glGenTextures(1, &_texture_shadow_array_point_id);
 glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, 
_texture_shadow_array_point_id);

 glTexImage3D(
 GL_TEXTURE_CUBE_MAP_ARRAY,
 0,
 GL_DEPTH_COMPONENT,
 SHADOW_WIDTH,
 SHADOW_HEIGHT,
 6 * _shadow_casters_point,
 0,
 GL_DEPTH_COMPONENT,
 GL_FLOAT,
 nullptr);

 glTexParameteri (GL_TEXTURE_CUBE_MAP_ARRAY, 
GL_TEXTURE_MIN_FILTER,   GL_NEAREST);
 glTexParameteri (GL_TEXTURE_CUBE_MAP_ARRAY, 
GL_TEXTURE_MAG_FILTER,   GL_NEAREST);
 glTexParameteri (GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_WRAP_S, 
  GL_CLAMP_TO_EDGE);
 glTexParameteri (GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_WRAP_T, 
  GL_CLAMP_TO_EDGE);
 glTexParameteri (GL_TEXTURE_CUBE_MAP_ARRAY, GL_TEXTURE_WRAP_R, 
  GL_CLAMP_TO_EDGE);

 for (unsigned int i = 0; i < _shadow_casters_point * 6; i++)
 {
 GLuint fbo_id;
 glGenFramebuffers(1, _id);

 glBindFramebuffer(GL_FRAMEBUFFER, fbo_id);
 glFramebufferTextureLayer(GL_FRAMEBUFFER, 
GL_DEPTH_ATTACHMENT, _texture_shadow_array_point_id, 0, i);

 glDrawBuffer(GL_NONE);
 glReadBuffer(GL_NONE);

 glBindFramebuffer(GL_FRAMEBUFFER, 0);
 }

 glBindTexture(GL_TEXTURE_CUBE_MAP_ARRAY, 0);
 }

 if (_shadow_casters_dir > 0)
 {
 glGenTextures(1, &_texture_shadow_array_dir_id);
 glBindTexture(GL_TEXTURE_2D_ARRAY, _texture_shadow_array_dir_id);

 glTexImage3D(
 GL_TEXTURE_2D_ARRAY,
 0,
 GL_DEPTH_COMPONENT,
 SHADOW_WIDTH,
 SHADOW_HEIGHT,
 _shadow_casters_dir,
 0,
 GL_DEPTH_COMPONENT,
 GL_FLOAT,
 nullptr);

 glTexParameteri (GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_S, 
GL_CLAMP_TO_BORDER);
 glTexParameteri (GL_TEXTURE_2D_ARRAY, GL_TEXTURE_WRAP_T, 
GL_CLAMP_TO_BORDER);

 GLfloat borderColor[] = { 1.0, 1.0, 1.0, 1.0 };
 glTexParameterfv(GL_TEXTURE_2D_ARRAY, GL_TEXTURE_BORDER_COLOR, 
borderColor);
 glTexParameteri (GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MIN_FILTER, 
GL_NEAREST);
 glTexParameteri (GL_TEXTURE_2D_ARRAY, GL_TEXTURE_MAG_FILTER, 
GL_NEAREST);

 for (unsigned int i = 0; i < _shadow_casters_dir; i++)
 {
 GLuint fbo_id;
 glGenFramebuffers(1, _id);

 glBindFramebuffer(GL_FRAMEBUFFER, fbo_id);
 glFramebufferTextureLayer(GL_FRAMEBUFFER, 
GL_DEPTH_ATTACHMENT, _texture_shadow_array_dir_id, 0, i);

 glDrawBuffer(GL_NONE);
 glReadBuffer(GL_NONE);

 glBindFramebuffer(GL_FRAMEBUFFER, 0);
 }
 glBindTexture(GL_TEXTURE_2D_ARRAY, 0);
 }
  }



--
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
___
Opensg-users mailing list
Opensg-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensg-users


Re: [Opensg-users] OpenSG2: Accumulated changes... part 3: texture

2017-01-19 Thread Carsten Neumann
Hello Johannes,

On 2017-01-18 04:58, Johannes Brunen wrote:
> Currently, I'm working on shadow techniques. For these I do need texture
> arrays, especially cube map arrays. I have added support to the
> TexureObjChunk and to LayeredTextureBuffer and TextureBuffer.

I think this changes the semantics of LayeredTextureBuffer in an 
incompatible way, so I'm not sure we can do this right away. See below 
why I think this changes semantics.

> The last two did have an 'unused' field named 'zoffset'. According to
> the specs of GL the correct parameter name is 'layer' and I have
> modified the Interface accordingly. See the .fcd files for that.
>
> Additionally the Buffers work with the 'glFramebufferTextureLayer' API
> of OpenGL now.

My understanding of glFramebufferTextureLayer is that it is used to 
attach a single face of a cubemap array texture as a framebuffer 
attachment. While when using a cubemap array texture with 
glFramebufferTexture3D this attaches all 6 faces of the cubemap as a 
layered attachment point. Which of the layers a primitive is rendered to 
is decided at runtime using a geometry shader that assigns to the 
builtin variable gl_Layer.
Therefore (assuming the above is correct and I didn't misread the patch) 
you are changing LayeredTextureBuffer from creating such a layered 
attachment to a non-layered attachment.
I think the use of 'glFramebufferTextureLayer' should only be in 
TextureBuffer, since that is used for non-layered framebuffer attachments.

Cheers,
Carsten

--
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
___
Opensg-users mailing list
Opensg-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensg-users