OpenGL 3+ RenderSystem

Discussion area about developing or extending OGRE, adding plugins for it or building applications on it. No newbie questions please, use the Help forum for that.
Post Reply
User avatar
scrawl
OGRE Expert User
OGRE Expert User
Posts: 1119
Joined: Sat Jan 01, 2011 7:57 pm
Location: Germany
x 2

Re: OpenGL 3+ RenderSystem

Post by scrawl » Sat Apr 06, 2013 1:38 pm

I tried the workaround. It seems to fix it.

Code: Select all

GL_VERSION = 4.3.0 NVIDIA 310.14
And yeah, I definitely have updated drivers since then.
0 x

Ident
Gremlin
Posts: 155
Joined: Thu Sep 17, 2009 8:43 pm
Location: Austria
Contact:

Re: OpenGL 3+ RenderSystem

Post by Ident » Sun Apr 14, 2013 8:39 pm

I would like to use this RenderSystem for a research project. For this we would need the Tesselation shaders of OpenGL 4.X+. I saw there was some talk in here about them already and i saw they are part of the 1.9 roadmap and also the source code seems to contain some fragments of tesselation shader support. I wanted to ask how far the tesselation shader progress is right now and to what extent they are functional?

The use-case would be to tesselate objects depending on proximity to the camera, similar to how it would be done for bump mapping tesselation.

Edit: fixed a sentence
Last edited by Ident on Mon Apr 15, 2013 7:36 pm, edited 1 time in total.
0 x

User avatar
masterfalcon
OGRE Team Member
OGRE Team Member
Posts: 4270
Joined: Sun Feb 25, 2007 4:56 am
Location: Bloomington, MN
Contact:

Re: OpenGL 3+ RenderSystem

Post by masterfalcon » Sun Apr 14, 2013 11:34 pm

There is some work on supporting them, but I have not yet had a successful test.
0 x

User avatar
holocronweaver
Google Summer of Code Student
Google Summer of Code Student
Posts: 273
Joined: Mon Oct 29, 2012 8:52 pm
Location: Princeton, NJ

Re: OpenGL 3+ RenderSystem

Post by holocronweaver » Sun Apr 14, 2013 11:52 pm

masterfalcon wrote:There is some work on supporting them, but I have not yet had a successful test.
Do you mean you have not tested tessellation, or that all your tests have not succeeded?
0 x

User avatar
masterfalcon
OGRE Team Member
OGRE Team Member
Posts: 4270
Joined: Sun Feb 25, 2007 4:56 am
Location: Bloomington, MN
Contact:

Re: OpenGL 3+ RenderSystem

Post by masterfalcon » Mon Apr 15, 2013 12:02 am

The tests have not been successful. Furthermore, I don't have a system that has decent GL debugging tools and supports GL 4. So it's slow going.

If anyone wants to help, it would be greatly appreciated.
0 x

User avatar
holocronweaver
Google Summer of Code Student
Google Summer of Code Student
Posts: 273
Joined: Mon Oct 29, 2012 8:52 pm
Location: Princeton, NJ

Re: OpenGL 3+ RenderSystem

Post by holocronweaver » Mon Apr 15, 2013 12:15 am

masterfalcon wrote:If anyone wants to help, it would be greatly appreciated.
*raises hand in the air so quickly his arm nearly comes out of socket* Meeeeeeeee!

I have an AMD Radeon 6950 (currently OpenGL 4.2 capable) and am fairly well acquainted with OpenGL 4 tessellation shaders. I am currently finishing up work on a paging system for the Ogre Volume component, but I cannot work on that during my lunch breaks so possibly tessellation shaders in OpenGL can fill the void. I need tessellation shaders for my personal Ogre project, so I have a personal stake in ensuring their successful impelmentation. That and I love new shiny things.

So what can I do to help?
0 x

User avatar
masterfalcon
OGRE Team Member
OGRE Team Member
Posts: 4270
Joined: Sun Feb 25, 2007 4:56 am
Location: Bloomington, MN
Contact:

Re: OpenGL 3+ RenderSystem

Post by masterfalcon » Mon Apr 15, 2013 12:36 am

Well, my understanding and experience with tessellation shaders is confined to trying to get this work. Very much a beginner. I get how it works, just have very little experience with them.
0 x

User avatar
holocronweaver
Google Summer of Code Student
Google Summer of Code Student
Posts: 273
Joined: Mon Oct 29, 2012 8:52 pm
Location: Princeton, NJ

Re: OpenGL 3+ RenderSystem

Post by holocronweaver » Mon Apr 15, 2013 1:47 am

Do you have particular test systems that need debugging or additional work? I have never debugged tessellation shaders using software debuggers, so that would be new to me. Up to now I always fix things the old fashion way by visualizing the tessellation grid and tweaking the shader until everything works.
0 x

User avatar
masterfalcon
OGRE Team Member
OGRE Team Member
Posts: 4270
Joined: Sun Feb 25, 2007 4:56 am
Location: Bloomington, MN
Contact:

Re: OpenGL 3+ RenderSystem

Post by masterfalcon » Mon Apr 15, 2013 2:14 am

So far I have only tried the tessellation sample. I'm not even sure if the shaders I wrote are correct.
0 x

Ident
Gremlin
Posts: 155
Joined: Thu Sep 17, 2009 8:43 pm
Location: Austria
Contact:

Re: OpenGL 3+ RenderSystem

Post by Ident » Mon Apr 15, 2013 7:45 pm

Once there is a working simple test-case I can also step in to help,test and find bugs and debug, because from then on I will be able to use this in my project.
0 x

User avatar
bvanevery
Goblin
Posts: 218
Joined: Wed Feb 28, 2007 4:54 am
Location: Asheville, NC

Re: OpenGL 3+ RenderSystem

Post by bvanevery » Mon Apr 15, 2013 7:48 pm

I can test whether it screws anything up on a 3d card that doesn't have tessellation.
0 x

User avatar
masterfalcon
OGRE Team Member
OGRE Team Member
Posts: 4270
Joined: Sun Feb 25, 2007 4:56 am
Location: Bloomington, MN
Contact:

Re: OpenGL 3+ RenderSystem

Post by masterfalcon » Tue Apr 16, 2013 5:14 am

I tried a little work recently. It didn't seem to help but may be in the right direction. I'm attaching the diff just in case it helps anyone.
Attachments
tess.diff.zip
(1.83 KiB) Downloaded 50 times
0 x

User avatar
holocronweaver
Google Summer of Code Student
Google Summer of Code Student
Posts: 273
Joined: Mon Oct 29, 2012 8:52 pm
Location: Princeton, NJ

Re: OpenGL 3+ RenderSystem

Post by holocronweaver » Wed Apr 17, 2013 1:37 pm

@masterfalcon: Do you think finishing up the OpenGL 3+ render system and creating samples would make a good GSoC project?
0 x

User avatar
masterfalcon
OGRE Team Member
OGRE Team Member
Posts: 4270
Joined: Sun Feb 25, 2007 4:56 am
Location: Bloomington, MN
Contact:

Re: OpenGL 3+ RenderSystem

Post by masterfalcon » Wed Apr 17, 2013 9:13 pm

Possibly. I'm afraid that there wouldn't be enough but we could probably come up with a good sized list of things to implement.
0 x

User avatar
masterfalcon
OGRE Team Member
OGRE Team Member
Posts: 4270
Joined: Sun Feb 25, 2007 4:56 am
Location: Bloomington, MN
Contact:

Re: OpenGL 3+ RenderSystem

Post by masterfalcon » Thu Apr 18, 2013 5:45 am

Another update to my tessellation work. It's rendering something at least, if you move the mouse around you'll see it. I suspect that there is something wrong with how I translated the shaders. Would anyone be able to verify?
Attachments
tess.diff.zip
(2.01 KiB) Downloaded 54 times
0 x

User avatar
holocronweaver
Google Summer of Code Student
Google Summer of Code Student
Posts: 273
Joined: Mon Oct 29, 2012 8:52 pm
Location: Princeton, NJ

Re: OpenGL 3+ RenderSystem

Post by holocronweaver » Tue Apr 30, 2013 6:23 pm

masterfalcon wrote:Another update to my tessellation work. It's rendering something at least, if you move the mouse around you'll see it. I suspect that there is something wrong with how I translated the shaders. Would anyone be able to verify?
I will check this out when I get home today.

BTW, besides the samples, are there any visual tests for OpenGL 3+?
0 x

User avatar
Klaim
Old One
Posts: 2565
Joined: Sun Sep 11, 2005 1:04 am
Location: Paris, France
Contact:

Re: OpenGL 3+ RenderSystem

Post by Klaim » Tue Apr 30, 2013 8:04 pm

masterfalcon wrote:Another update to my tessellation work. It's rendering something at least, if you move the mouse around you'll see it. I suspect that there is something wrong with how I translated the shaders. Would anyone be able to verify?
Sorry I will not be able to test until at least thursday.
0 x

User avatar
masterfalcon
OGRE Team Member
OGRE Team Member
Posts: 4270
Joined: Sun Feb 25, 2007 4:56 am
Location: Bloomington, MN
Contact:

Re: OpenGL 3+ RenderSystem

Post by masterfalcon » Tue Apr 30, 2013 9:21 pm

@holocronweaver Nothing specific, just the normal tests. I have them partially running but they crash part way through. I know why, just haven't gotten to fixing it yet.

@Klaim No problem. Take your time.
0 x

dermont
Orc Shaman
Posts: 770
Joined: Thu Dec 09, 2004 2:51 am
x 8

Re: OpenGL 3+ RenderSystem

Post by dermont » Thu May 09, 2013 11:18 am

Not sure if I should be posting this in Help (if so sorry).

I'm trying to create a simple example using OpenGL3+ from looking at the Sdk Samples.

From trial and error and with the ShaderGeneratorTechniqueResolverListener where it appears that the Ogre::RTShader creates shaders for material's (with DEFAULT_SCHEME_NAME) techniques I can display a mesh on the screen.

The problem I encounter is creating a manual video texture to play a gstreamer video.

With OpenGL everything works fine where I use a shader to swap the gstreamer data red and blue components.

With OpenGL3+ it just doesn't work and I'm not sure how to do this, whether it is a problem in my version 150 shaders or I'm not understanding something basic (most likely). I've disabled the ShaderGeneratorTechniqueResolverListener for testing this. Any help or pointers would be greatly appreciated, failing that I guess I'll have to test with a native GL demo.

The video texture:

Code: Select all

// Create new texture with updated dimensions.
    mVideoTexture = Ogre::TextureManager::getSingleton().createManual(
                    mName + "_Texture",
                    ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
                    TEX_TYPE_2D,
                    mVideoWidth, mVideoHeight,
                    0,PF_X8R8G8B8,
                    //0, PF_B8G8R8A8,
                    //0, PF_R8G8B8A8, //THIS ONE
                    //0,PF_A8R8G8B8,
                    TU_DYNAMIC_WRITE_ONLY);

    //mVideoMaterial->getTechnique(0)->setSchemeName("ShaderScheme");
    mVideoMaterial->getTechnique(0)->getPass(0)->removeAllTextureUnitStates();
    mVideoMaterial->getTechnique(0)->getPass(0)->createTextureUnitState(
                    mVideoTexture->getName());

The shaders, for OpenGL these were used to swap the red and blue components.

Code: Select all

    String customVideoMatVp_GLSL =
        "#version 150 \n"
        "in vec2 uv0;\n"
        "in vec4 vertex;\n"
        "out vec2 oUv0;\n"
        "uniform mat4 worldViewProj;\n"
        "void main()\n"
        "{\n"
            " gl_Position = worldViewProj * vertex;\n"
            " oUv0.xy = uv0.xy;\n"
        "}\n";

    String customVideoMatFp_GLSL =
        "#version 150 \n"
        "in vec2 oUv0;\n"
        "out vec4 fragColour;\n"
        "uniform sampler2D diffuseMap;\n"
        "void main()\n"
        "{\n"
           " fragColour = vec4(texture(diffuseMap, oUv0.xy).zyx,1.0);\n"
        "}\n";

        String customVideoMatVp_GLSL_120 =
            " #version 120 \n"
            " varying vec2 UV;\n"
            " uniform mat4 worldViewProj;\n"
            " void main()\n"
            " {\n"
                " gl_Position = worldViewProj * gl_Vertex;\n"
                " UV = gl_MultiTexCoord0.xy;"
            " }\n";
        String customVideoMatFp_GLSL_120 =
            " varying vec2 UV;\n"
            " uniform sampler2D diffuseMap;\n"
            " void main()\n"
            "{\n"
                " gl_FragColor = vec4(texture2D(diffuseMap, UV).zyx,1.0);\n"
            "}\n";

    bool useCG = false;
    bool useGLSL120 = false;
   bool useGLSL150 = true;

    String mLanguage;
    if (useCG)
        mLanguage = "cg";
    else
        mLanguage = "glsl";

    HighLevelGpuProgramPtr vp = HighLevelGpuProgramManager::getSingleton()
                .createProgram("VideoVp",
                        ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
                        mLanguage, GPT_VERTEX_PROGRAM);
    HighLevelGpuProgramPtr fp = HighLevelGpuProgramManager::getSingleton()
            .createProgram("VideoFp",
            ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME,
                mLanguage, GPT_FRAGMENT_PROGRAM);


    if (vp->getLanguage()=="cg") {
        vp->setSource(customVideoMatVp_CG);
        vp->setParameter("profiles", "vs_1_1 arbvp1");
        vp->setParameter("entry_point", "VideoVp");
    }
    else {
        if (useGLSL120) {
            vp->setParameter("syntax", "glsl");
            vp->setSource(customVideoMatVp_GLSL_120);
        }
        else
        {
            vp->setParameter("syntax", "glsl150");
            vp->setSource(customVideoMatVp_GLSL);
        }
    }

    if (fp->getLanguage()=="cg") {
        fp->setSource(customVideoMatFp_CG);
        fp->setParameter("profiles", "ps_1_1 arbfp1");
        fp->setParameter("entry_point", "VideoFp");
    }
    else
    {
        if (useGLSL120) {
            fp->setParameter("syntax", "glsl");
            fp->setSource(customVideoMatFp_GLSL_120);
        }
        else
        {
            fp->setParameter("syntax", "glsl150");
            fp->setSource(customVideoMatFp_GLSL);
        }
    }

    vp->load();
    fp->load();

    p->setVertexProgram("VideoVp");
    p->setFragmentProgram("VideoFp");

    p->getVertexProgramParameters()->setNamedAutoConstant(
                "worldViewProj", 
                GpuProgramParameters::ACT_WORLDVIEWPROJ_MATRIX);

    if (!useCG)
        p->getFragmentProgramParameters()->setNamedConstant(
                "diffuseMap", 
                0);
Updating the texture data where memory/size is the GStreamer memory/size of data.

Code: Select all


//guint8* memory, gsize size

HardwarePixelBufferSharedPtr pixelBuffer = mVideoTexture->getBuffer();
void* textureData = pixelBuffer->lock(HardwareBuffer::HBL_DISCARD);
memcpy(textureData, &memory[0], (int)size);
pixelBuffer->unlock();
0 x

User avatar
masterfalcon
OGRE Team Member
OGRE Team Member
Posts: 4270
Joined: Sun Feb 25, 2007 4:56 am
Location: Bloomington, MN
Contact:

Re: OpenGL 3+ RenderSystem

Post by masterfalcon » Thu May 09, 2013 6:57 pm

Is it crashing or are you just not getting the output you expect? You could try turning on GL error checks in OgreGL3PlusPrerequisites.h and see if that reveals part of the problem. Otherwise I can try to take a look later using your sample.
0 x

dermont
Orc Shaman
Posts: 770
Joined: Thu Dec 09, 2004 2:51 am
x 8

Re: OpenGL 3+ RenderSystem

Post by dermont » Thu May 09, 2013 7:50 pm

masterfalcon wrote:Is it crashing or are you just not getting the output you expect?
No it just outputs something unrelated to whatever the video is.
http://img818.imageshack.us/img818/4985/gstreamer.png
masterfalcon wrote:You could try turning on GL error checks in OgreGL3PlusPrerequisites.h and see if that reveals part of the problem.
Yeah I'll try that and running through apitrace.
masterfalcon wrote:Otherwise I can try to take a look later using your sample.
No need, you have enough on your plate. I was just hoping that I had was doing something so dumb due to me misunderstanding the differences between GL and GL3+ that it would be blatantly obvious.

I'll try implementing one of the demos that has a manual texture and work from there.
0 x

dermont
Orc Shaman
Posts: 770
Joined: Thu Dec 09, 2004 2:51 am
x 8

Re: OpenGL 3+ RenderSystem

Post by dermont » Sun May 12, 2013 11:08 am

dermont wrote:
masterfalcon wrote:
masterfalcon wrote:You could try turning on GL error checks in OgreGL3PlusPrerequisites.h and see if that reveals part of the problem.
Yeah I'll try that and running through apitrace.
To debug this:

a) I disabled the Vertex/FragmentProgram creation. The video played OK with the shaders generated via ShaderGeneratorTechniqueResolverListener.

However I need a straightforward way to update the shader code, e.g. swap red and blue components.

b) I wrote out the material from the MaterialSerializer, and obtained a copy of the vertex/fragment shaders ShaderGeneratorTechniqueResolverListener. I combined these into material/shader files and everything works fine using these media. The ShaderGeneratorTechniqueResolverListener was never invoked.

c) I returned to creating the programs in code noticed that there was an additional technique, so I removed the technique(1) and it segfaulted in ShaderGeneratorTechniqueResolverListener. There appears to be no difference in my code and that of (b). I set technique(0) setSchemeName to Ogre::RTShader::ShaderGenerator::DEFAULT_SCHEME_NAME and it worked fine.

I understand that the problem is probably with my understanding of scheme usage and that I probably need to update shader listener to handle my particular case (i.e. no GL2 shaders etc).

Thanks for all your advice anyway.
0 x

Syniurge
Halfling
Posts: 40
Joined: Thu Aug 30, 2012 1:43 pm
Location: France

Re: OpenGL 3+ RenderSystem

Post by Syniurge » Wed May 15, 2013 3:00 pm

On Mesa's current R600 driver the plugin fails to load with:

Code: Select all

symbol lookup error: /home/syniurge/Projets/Dependencies/ogre_build/lib/RenderSystem_GL3Plus.so.1.9.0: undefined symbol: glXCreateContextAttribsARB
Is this because it's calling glXCreateContextAttribsARB directly instead of using glXGetProcAddressARB?
0 x

User avatar
masterfalcon
OGRE Team Member
OGRE Team Member
Posts: 4270
Joined: Sun Feb 25, 2007 4:56 am
Location: Bloomington, MN
Contact:

Re: OpenGL 3+ RenderSystem

Post by masterfalcon » Wed May 15, 2013 3:35 pm

Probably. Perhaps we need to add a function pointer and get the address.
0 x

dermont
Orc Shaman
Posts: 770
Joined: Thu Dec 09, 2004 2:51 am
x 8

Re: OpenGL 3+ RenderSystem

Post by dermont » Thu May 16, 2013 6:44 am

When running the animation demos from SampleBrowser OepnGL3 they are all software skinning. The following message is displayed:

Code: Select all

Error attaching FFPLib_Common_VS shader object to GLSL Program Object
Program binary could not be loaded. Binary is not compatible with current driver/hardware combination.
In SampleContext.h it appears to be adding resources for RTShaderLib/GLSL and RTShaderLib/GLSL150. Shouldn't it be one or the other?

Code: Select all

https://bitbucket.org/sinbad/ogre/raw/2ad4bd4336205e6964152141bcf15e105d215fea/Samples/Common/include/SampleContext.h

else if(Ogre::GpuProgramManager::getSingleton().isSyntaxSupported("glsl"))
            {
Ogre::ResourceGroupManager::getSingleton().addResourceLocation(arch + "/RTShaderLib/GLSL", type, sec);
                if(Ogre::GpuProgramManager::getSingleton().isSyntaxSupported("glsl150"))
                {
                    Ogre::ResourceGroupManager::getSingleton().addResourceLocation(arch + "/RTShaderLib/GLSL150", type, sec);
                }
            }
For the Skeletal Animation demo I removed the Software blending technique for jaiqua, updated SampleContext.h to load only RTShaderLib/GLSL or RTShaderLib/GLSL150. I get the following error:

Code: Select all

GLSL compile log: Ogre/HardwareSkinningTwoWeightsShadowCasterGLSL
0(43) : error C7533: global variable gl_TexCoord is deprecated after version 120
GLSL compile log: Ogre/HardwareSkinningTwoWeightsShadowCasterGLSL
https://bitbucket.org/sinbad/ogre/src/2 ... sl?at=v1-9

Indeed the deprecated function is in the gl_TexCoord GLSL150 programs. Does this mean that not all shaders have been updated or am I doing something wrong here.
0 x

Post Reply