• Content count

  • Joined

  • Last visited

Community Reputation

276 Neutral

About Techieman

  • Rank
  1. Hey folks, recently I got an enlightenment and I grasped, how important unit tests actually are. Also I understood how practically "Test Driven Development" for solo developers can be. In theory it sounds really great (yet another holy grail for me).   However, I don't know how to pull it off.   My current situation is the following: I am developing a library, which provides facilities for cross-platform game development. My way of testing 'till now is/was like that: Does it display (or play the sound) as I expected, then it works. How would one test for these kind of results? I.e. how do I know, if I have a window actually being displayed on the screen? I feel really lost about this. It quite easy to check, whether my "fibonacci algorithm" calculates the proper results. But what about visual or aural results? Hopefully someone can help me out on this. :-) With best regards   Julien  
  2. Mapping C++ Entrypoint Into Dll

    As far as I know, it doesn't for Android, since it is compiling it to a .SO. That's the problem I am aiming to solve.
  3. Hi, my current project, is a small library for game developers. The library consists of classes, I used in earlier game projects, e.g. window creation or JSON parsing.   What's bothering me currently, is that I have different 'main'-signatures across different platforms, i.e. 'WinMain' on Windows or 'ANativeActivity_onCreate' on Android.    I'd like to map these into a DLL/SO-file, so that the user has only to write a 'main'-entrypoint once, which works across  multiple platforms.   Is it possible to move the entrypoint into a 'external module' or do I have to link statically? Thanks in advance, Julien
  4. Vulkan Vulkan Tutorial

    May I ask why everyone tends to load the function pointers dynamically *by hand* instead of leveraging the Vulkan SDK? If seen this in paper from Intel. But why?
  5. Few moments ago, I came across a post on stackoverflow. The thread owner states some problems when using DXGI with OpenGL,  implying, that DXGI actually can be used alongside OpenGL.   My question is what are the benefits of leveraging DXGI instead of GDI, when  developing with OpenGL? What are the drawbacks?   - Julien
  6. Hello folks!   Currently I am working on my engine again and I'd love to implement a threading mechanism,  that can easily scale with the number of cores avaible. So an agent-based solution won't fit.    Once, I implemented a Thread Pool for an earlier project, which used it mainly to save and process files in the background. However, I wondered if a threadpool would be appropriate for multi-threaded game engine and searched for some  'additional informations' and I found a blog post by Sean Middleditch. In his post, he explain one should settle for Thread Pools, with 'Jobs' and 'Batches'.  After finishing reading it, I felt enlighted :), still I am having trouble to understand the idea behind it. Basicly I don't understand what 'Batches' and 'Jobs' are.   TL;DR What are 'Batches' and 'Jobs' when generally speaking about Thread Pooling? What are the best way to identify a function call as a 'Batch' or either as a 'Job'? How would one go about creating a multi-thread system?   Thanks in advance P.S.: I hope I managed to express myself properly; Englisch ain't my native tongue.
  7. Draw 2D empty and filled circle

    Well cosine and sine are you best friends when it comes to rendering circles.  cosine of an angle equals the x- and sine of an angle equals the y-coordinate.  Of course you can't generate a "perfect circle". It will always have edges. If you have more vertices the circle will look less angular and vice versa. I hope this enough of a hint. Sincerely,  Julien
  8. Hi, I have noticed something strange. Whenever my application closes, it releases all resources (theoretically). It just loops over it: Context::~Context(){ for(int i = 0; i < _VertexBuffers.size(); i++){ _VertexBuffers[i].release(); } for(int i = 0; i < _IndexBuffers.size(); i++){ _IndexBuffers[i].release(); } pSwapChain->Release(); pRTV->Release(); pDevice->Release(); pContext->Release(); // TODO: // Keep track of created resources and delete them then. } The release method is defined is following: virtual void release(){ if(valid && (pBuffer != nullptr)){ valid = false; pBuffer->Release(); } } However, I am getting an "Access Violation" when trying to clean up, even though the "valid" flag is set to true. I made sure, that "valid" is only "true" when a buffer was created successfully. I tried to eliminate the spots and as it seems void Context::setVertexBuffer(const unsigned int buffer_id){ UINT stride = sizeof(float) * 7; UINT offset = 0; if(_VertexBuffers[buffer_id].isValid()) pContext->IASetVertexBuffers(0, 1, &(_VertexBuffers[buffer_id].pBuffer), &stride, &offset); } As it seems, "IASetVertexBuffer" is kind of invalidating the resource. I am probably using it the wrong way, am I not? Cheers,  Julien
  9. X11 Client Events

    Sorry, my question was too unprecise.  I couldn't find any ID for a equivalent of WM_CLOSE/WM_QUIT/WM_DESTROY for "XEvent.type".
  10. X11 Client Events

    Hi, my next milestone is to port the Window class (or better the Window_Impl class) to X11 but I am uncertain how to catch and process events like "WM_CLOSE" known from WinAPI.   Are there even events like this in Linux/X11?     Sincerely Julien   P.S.: My team has a reason NOT to use GLFW etc. even if it's just personal preference.
  11. We're (or better I am, since Platform abstraction and rendering is my part in the engine) using our own classes for window creation.  Those classes are already ported and tested.  It's just about the context creation.
  12. Damn, what a pitty. So I have to implement the GLX and CGL part too. Thanks for your help.
  13. Hi, I've recently come across EGL, which happens to be a unified official cross-platform standard to replace (or at least abstract around) the platform-specific windowing/context-creation APIs. By my understanding it was made for OpenGL ES, but however, since Version 1.4 "eglBindAPI" takes another optional Parameter : "EGL_OPENGL_API".    Does this mean, I can create an OpenGL 4 Context on Windows, Linux and Mac OS using EGL? If yes, where do I find the development libraries? LG Julien      
  14. Modern Renderer Design

    So, I am doing a prototype (a draft) based on the information you gave me. I've following classes: struct Mesh; // Data only struct Light; // Data only class MeshRenderer; class LightRenderer; class Scene; class RenderQueue; class Renderer; The idea is, that each renderable entity has it's own renderer. The structures are being submitted to the "Scene", the "*Renderer" class process the data and submit drawcalls to the "RenderQueue" using DrawItems. The RenderQueue sorts the draw calls (opacity hey ho!) and if it finds the same drawcalls (e.g. using same vertex/indexbuffers handles) it batches them into a "InstancedDrawCall". Finally the "Renderer" processes these DrawCalls.  Is this the way to go? I am still not sure on how much I should abstract things. Should the renderQueue be aware of updating/creating resources (loading vertices in a VertexBuffer?). EDIT: Should the render queue be like the "deferred context" as known from DirectX 11, yet stateless?  
  15. Modern Renderer Design

    Well, actually I wanted to. Let's say a target machine doesn't support OpenGL 4 due to missing drivers. I'd fall back to OpenGL 2.   That's the problem I am trying to avoid at all cost.   So it's better to abstract the rendering api (perhaps into a stateless rendering api; I just stumbled upon this, kind of similar to hodgeman's approach, isn't it)?  About the sceneManager: Is it just a bunch of classes holding every mesh etc. in a std::vector (or something comparable)?  And is the sceneManager commiting the draw calls? So, finally: Thanks to any who replied. I've got some awesome content to think about (@L.Spiro, @Hodgeman) LG Julien