Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] New renderer #287

Closed
wants to merge 32 commits into from
Closed

[WIP] New renderer #287

wants to merge 32 commits into from

Conversation

TheJJ
Copy link
Member

@TheJJ TheJJ commented Apr 21, 2015

This is basically a totally new graphics engine, designed for our needs.

  • Abstraction of render backend
  • OpenGL 3.3 requirement
  • Preparations for Vulkan (we don't know much..)
  • File watching subsystem
  • constexpr key-value map
  • Screenshot support
  • Render pipeline abstraction
    • Textures
    • Shaders
    • Compiletime shader variable access
      • Uniforms
      • Vertex attributes
      • Dynamic buffer uploading
    • Samplers
    • Materials
    • Geometries
  • Quaternions
  • Texture position transformations without reuploading vertex buffer
  • Texture packing
    • Efficient binpacking
    • 3D Textures
  • Separate renderer thread and other event loop improvements
  • Efficient render task queuing (minimize shader/texture changes)
    • Viewport clipping
  • Smooth zooming
  • Enable Z-Buffering
  • Geometry drawing
    • squares
    • circles
    • smooth paths
    • boxes (for the gui)
    • text rendering (use freetype / harfbuzz / pango)
  • Perspective translation (e.g. the unit-selected-circle)
  • Terrain rendering
    • Terrain texture merging to single square tile
    • Perspective rendering
    • Blending cache
    • Terrain blending in the shader (in perspective to easily split tiles)
  • Outline rendering with obstruction dual-pass (z-flip)
  • Occlusion queries
  • Pixel-perfect unit hitbox for unit selection and damage areas

implements #34, #286 and ideas from #153
closes #264 (file watching subsystem).
will do #149 (terrain blending in shader), #158 / #154 (blending cache), #141 (terrain perspective adjustments), #359 (outlines), #368 (unit selection box), #374 (texture clipping incorrect).

If you wanna work on this as well, submit pull requests to my branch please!

@TheJJ TheJJ added area: renderer Concerns our graphics renderer nice new thing ☺ A new feature that was not there before lang: c++ Done in C++ code in progress labels Apr 21, 2015
@Jon0
Copy link
Member

Jon0 commented Jul 19, 2015

can I request a Texture constructor which is usable by job threads? Currently the construction leads to gl calls which segfaults for not having an OpenGL context. I have made a small work around by moving the glBufferData() call to be done inside the first Texture::draw() call of a particular texture. which maybe the best way of implementing this feature. We should also have some kind of check that Texture::draw() is called using the main thread.

@mic-e
Copy link
Member

mic-e commented Jul 19, 2015

Maybe we should move all program logic (including the main loop) outside Thread #0 (the thread that owns the OpenGL context and provides input), and have all other threads make synchronous calls into Thread #0?

@TheJJ
Copy link
Member Author

TheJJ commented Jul 20, 2015

My plan was to create a queue structure for all tasks to be rendered. Things to be drawn (textures, texts, geometries, whatever) would be added/registered to a queue and the renderer, when it's ready for the next call, fetches all those instructions, reorders them and then renders them to the framebuffer.

The registering/adding can be done from any thread, the renderer will either fetch the instructions itself or the instructions are converted/processed upon enqueuing, i haven't decided on that yet.

Basically all other subsystems will get backend-independent handles for all the render calls, so opengl or vulcan or maybe html5 someday can do the actual rendering then.

@TheJJ TheJJ mentioned this pull request Jul 28, 2015
@TheJJ TheJJ force-pushed the renderer branch 3 times, most recently from e1b912a to 9f214c7 Compare July 31, 2015 14:21
@TheJJ TheJJ force-pushed the renderer branch 2 times, most recently from ad93ccc to 5fce7a9 Compare August 10, 2015 04:43
@TheJJ
Copy link
Member Author

TheJJ commented Aug 10, 2015

The thread-independent texture (TextureData in renderer/texture.h) should now be there i think. You can fill it with data anywhere and have to register it at the renderer instance to actually create the internal opengl handles.

@TheJJ
Copy link
Member Author

TheJJ commented Jan 18, 2017

@TheJJ TheJJ added rendering area: renderer Concerns our graphics renderer and removed area: renderer Concerns our graphics renderer vulkan labels Jan 21, 2017
@TheJJ
Copy link
Member Author

TheJJ commented May 22, 2017

Continued in #850 :)

@TheJJ TheJJ closed this May 22, 2017
@TheJJ TheJJ deleted the renderer branch January 27, 2019 19:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area: renderer Concerns our graphics renderer lang: c++ Done in C++ code nice new thing ☺ A new feature that was not there before
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Create file watching subsystem
4 participants