Jump to content
  • Advertisement

TMII

Member
  • Content Count

    4
  • Joined

  • Last visited

Community Reputation

0 Neutral

About TMII

  • Rank
    Newbie

Personal Information

  • Interests
    Programming

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Thank you. I am going to avoid uniforms then. It's the same with glBufferSubData it seems. I read that a lot of times and I was wondering about that because it reads like it has "disadvantages" using instancing for small meshes but as far as I can tell, drawing one quad vs drawing a thousand quads instanced does not make much of a difference. The point sprite version might be a tad faster (probably important for a AAA title but a waste of time for me at the moment) but has the disadvantage that they disappear at the edge of the screen quite visibly.
  2. Thanks for the answers, I was taking the hint to use a profiler and I found it stalling nearly a second mostly here (~600ms) glUniform3f(location, value0, value1, value2); and here (~300ms) glUniformMatrix4fv(location, 1, false, dataArray, 0); this is enormous and I have absolutly no idea why this is. It gets even weirder because glUniformMatrix gets called another time, right before the stalling one and it has no visible performance impact in the profiler (literally). I noticed that updating the VBOs with glBufferData has a relative tiny overhead, so I changed the uniforms in the shader to attributes and the problems are gone. Does someone know why this is? Do uniforms cause some synchronization issue? *Edit And if it wouldn't be already weird enough, as the program keeps running this stalling gets noticable worser.
  3. Yes, thank you, even though I believe both methods are exactly the same, with the second being to render the fonts dynamically on program startup. What I do not understand about his approach (I am not a C++ guy) is he uploading a new quad for every character to be rendered?
  4. I was trying to implement text rendering and thought I was really smart using instancing in order to improve performance. Jesus, I couldn't have been more wrong than that. The question is: What is the best approach now? Do I really have to go the "OpenGL 1.1" route and upload every character model repeatedly to a VBO? The initial idea was that every character is basically a "quad" rendered at a specific "position", with character specific "scale" and "textureCoordinates". The idea was to save the character specific data in an uniform vec4 array on the shader side, accessed with a single "characterIndex" that is sent per instance in order to save performance by not sending tons of duplicate data. It works, but it is really slow and I think the problem is accessing the array: #version 310 uniform mat4 projectionMatrix; uniform mat4 worldMatrix; uniform mat4 modelMatrix; in vec4 in_Position; in vec2 in_TextureCoord; in float characterIndex; in float advance; uniform vec2[256] texturePosData; uniform vec2[256] scaleData; out vec2 pass_TextureCoord; void main(void) { int index = int(characterIndex); vec2 texturePos = texturePosData[index]; vec2 scale = scaleData[index]; gl_Position = projectionMatrix * worldMatrix * modelMatrix * vec4(in_Position.x * scale.x + advance, in_Position.y * scale.y, in_Position.zw); pass_TextureCoord = in_TextureCoord * scale + texturePos; } By just rendering a few strings, the FPS went from 60 to 5. The question is: What do I do now? Is it a better approach to pack and send the arrays (2*vec2) in a VBO to the shader? I tried to avoid just that, because a string with "AAAAAAAA" i.e. sends a bunch of duplicate data, where before, only the index referenced a specific character. So there is not only much more to upload for every rendered string, there is also 4 times more data to be prepared on the CPU side. Thank you very much
  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

GameDev.net is your game development community. Create an account for your GameDev Portfolio and participate in the largest developer community in the games industry.

Sign me up!