   Hardware support
  Hello there,I stand before the dilemma which library to use - DirectX or Allegro style 2D renderer. The features that are of importance to me are fast blit, alpha blend, primitives (lines, rects, circles etc), and acceptance (as many PCs as possible should be able to run the application). The problem is, DirectX offers a huge performance boost at the cost of crashing on many systems (according my experience). So is there any way to ensure that the program will work on all configurations, which have at least the DX runtime version installed that I used to program it? For example, if a certain vertex shader is not available, a software replacement of it to handle the respective routines, of course with some performance losses.Note: I really don't have the time to spend on studying hardware, even if I would like to, so solutions like checking every possible device type or video card option and using only the possibilities the system offers, won't help :(Thanks in advance!!   
  You could always do both, or at least make the code in such a way that it's easy to change your mind later on. You just need to create a rendering interface and implement it twice.You can even allow the user to select the option which works best for them if you want to.It'd look something like this:class IRenderer{public:    IRenderer() {}    virtual ~IRenderer() {}    virtual bool Init(void) = 0;    virtual void Shutdown(void) = 0;    virtual bool DrawLine(float x1, float y1, float x2, float y2) = 0;    // etc...};class D3DRenderer : public IRenderer{public:    D3DRenderer();    virtual ~D3DRenderer();    virtual bool Init(void);    virtual void Shutdown(void);    virtual bool DrawLine(float x1, float y1, float x2, float y2);    // etc...};class SoftwareRenderer : public IRenderer{};;  Pretty much every card on the market today can do basic D3D9, you don't need to use shaders at all - you can just use the fixed function stuff (Which every card with D3D9 drivers can do). Likewise, every card on the market can do hardware alpha blending and transparancy / translucency, and obviously rotation.Unless you're targetting Windows 3.11, I really wouldn't bother going the "pure 2D" route - even Windows 95 supports DirectX 9 (Someone correct me if I'm wrong here).EDIT: This is assuming you're talking about D3D, of course. Almost no cards support 2D hardware stuff (I.e. DirectDraw).   ;Quote:Original post by Evil Steveeven Windows 95 supports DirectX 9 (Someone correct me if I'm wrong here).I think this bit is wrong, I remember reading on MSDN somewhere that Dx8.1 and above require at least Windows 98, but I tried using their horrible search engine again and couldn't find the page to confirm that.  If anyone can find a page showing which versions of DirectX are supported by the various versions of Windows, or vice versa, I'd much appreciate a link.  :)   ;  Currently I can't give an exact example, sorry for that, but the problem with my last application was something like this:I wanted to render on a RenderTarget surface (not the backbuffer) and I didn't find any hint on which mempool to allocate it. So I tried default and managed, as far as I remember, and both worked on my PC (geForce 6800). So I picked one randomly and everything worked fine. At the place where I presented my project however, on some older PCs and a laptop (probably geForce 5200 video), the render did strange things (like drawing pixel junk). Moreover, my textures (created as non-pow2) were stretched over the bottom and right borders, so part of them were cut...@Adam_42 - this does not solve the problem, because whatever environment I select won't fit perfect to my needs; so I try do adopt one of them   