Archived

This topic is now archived and is closed to further replies.

RS_Hybrid

Software Rendering?

Recommended Posts

I was just looking around the forum (specifically Graphics Programming & Theory) and i was wondering, when you learn either DirectX or OpenGL, are you really learning to program? I mean i know you can make games using either API with C++ or another language, but are you really learning to program? Because i''ve noticed that a lot of those (top notch guys) in the Graphics Programming room are making software renderers. My second question, what is a software renderer? Although i''ve looked around and read a little bit about it, i''m still slightly confused, i''m not sure if its a graphics API that you make or if its just the tool that you make in order to handle all of the graphics stuff that you''ll be using to render all graphics on the screen. Any insight will be greatly appreciated no theory`

Share this post


Link to post
Share on other sites
I think I can answear your first question: no, you ain''t learning to program using DX or OGL. You are learning the API.

In order how to learn to program you have to learn a programming language like C, C++ or perhaps Java. You will use that language later in your API code.

Share this post


Link to post
Share on other sites
A software renderer is like making your own graphics api which is pretty much pointless these days if you are making a game.

Firstly, it is no easy task to make a software renderer(Im sure Microsoft will agree with this, it took them several efforts/years to get DirectX to where it is today. Im sure you can imagine what it will take a small development team to do the same). Even if you do make a sofware renderer as good as DirectX / OpenGL, it will be way slower. DirectX can render in software mode when necessay but just like OpenGL, it is hardware accelerated. It is highly unlikely anyone without a huge team and big funding could make a graphics api which is as advanced and as fast as DirectX /Opengl.

Even if they did, they would have to approach all the major hardware vendors out there and try and convince them that they should implement the api in their gfx cards. Hardware accelerated means the graphics card does most of the graphical work involved in producing the image on screen.

It was common for game companies to make software renderers with enough features to display viewable graphics at playable framerates. The reason was because in the past most PC''s did not have 3d gfx cards. Today it''s a different situation and you should stick to OpenGL/Direct3d for your 3d rendering needs.

Share this post


Link to post
Share on other sites
quote:
Original post by GamerSg
A software renderer is like making your own graphics api which is pretty much pointless these days if you are making a game.

Firstly, it is no easy task to make a software renderer(Im sure Microsoft will agree with this, it took them several efforts/years to get DirectX to where it is today. Im sure you can imagine what it will take a small development team to do the same). Even if you do make a sofware renderer as good as DirectX / OpenGL, it will be way slower. DirectX can render in software mode when necessay but just like OpenGL, it is hardware accelerated. It is highly unlikely anyone without a huge team and big funding could make a graphics api which is as advanced and as fast as DirectX /Opengl.

Even if they did, they would have to approach all the major hardware vendors out there and try and convince them that they should implement the api in their gfx cards. Hardware accelerated means the graphics card does most of the graphical work involved in producing the image on screen.

It was common for game companies to make software renderers with enough features to display viewable graphics at playable framerates. The reason was because in the past most PC''s did not have 3d gfx cards. Today it''s a different situation and you should stick to OpenGL/Direct3d for your 3d rendering needs.


Maybe not, but it''s A.) a good learning experience, and B.) can be custom built to support only things you need, hence be faster than an all purpose software engine so it could make it playable on a machine that it wouldn''t have been playable on if you didn''t write it. I have personally written more than one software engine, and it''s speed is plenty fast for what it was meant for and was very small, could run on more than a single OS (like the one I wrote, which had no 3d hardware support), so it was well worth the effort for me . Oh, and it only took less than a week to write from scratch (although, not in a completely re-useable manner).

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
quote:
Original post by Haido
*Ahem ahem* What about software renderers on consoles ?? DirectX and OpenGL aren''t there anywhere any time.


*Ahem ahem* What about f.e. XBox?

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
quote:
Original post by Haido
*Ahem ahem* What about software renderers on consoles ?? DirectX and OpenGL aren''t there anywhere any time.


The only console currently out (new console that is) that would require a software renderer would be the Gameboy advance.

Xbox, Ps2, and Gamecube may not have API''s exactly but they do have sub-systems which allow you to access the 3d rendering hardware directly and because everything is accellerated in 3d hardware you can not consider this to be a "software renderer".

Share this post


Link to post
Share on other sites
quote:
Original post by Android_s
I think I can answear your first question: no, you ain''t learning to program using DX or OGL. You are learning the API.

In order how to learn to program you have to learn a programming language like C, C++ or perhaps Java. You will use that language later in your API code.


I have learned C++, not all of it, but enough to understand API''s like Win32-DX-OpenGL. I was just wondering if learning DirectX teaches you any programming at all.. guess thats a no no..It''s still cool to use its features, but thanx for the comments i do appreciate it.

Maybe sometime in the future I''ll write my own software render just to learn how everything works. Maybe not to get something better then the DirectX/OpenGL API but just to learn how stuff work under the hood. Besides the idea of having games run when hardware accelaration isn''t present actually seems interesting, cause as you said, the software''s doing the work right?

no theory`

Share this post


Link to post
Share on other sites
I''m just curious, but if i were to write my own software rendering program, would i simply use C++ and it''s libraries? or is there something else that i''d need as well. I''m assuming that C++ supports most features to make a software renderer right?

no theory`

Share this post


Link to post
Share on other sites
I will code a SW renderer later this year if plans go to reality, I have done this a couple of times before, and the basic thing why I want to do that is because I want to have fun.

I don''t neccessary need to push X millions triangles to think that I''m having a good time, pushing 5 triangles where I know every pixel is out there for a reason, and doing everything by myself, that''s my reward.

Agreed, I don''t plan to try to make some cool game demos which I want to send in to a publisher/gamestudio to get me a job (the chance is so little you succeed with such a task anyway).. I''m just programming for the fun of it, and I don''t think programming against an API is more fun than doing every part of the pipeline for yourself.

There is no limits except speed when you make a software renderer... and I don''t count time when I''m making hobby projects since I''m basicly doing it to spend time :-)

Same goes for audio. While I''m using fmod I''m eager to learn how to write a softsynth. However, I''ve always been more interested in the pixels than in the samples anyway :-)

Just some ideas... if it''s hobby programming, do what you think is fun, not "best" because some other dudes think so.

I''m not telling you software rendering must indeed be more fun than programming opengl or directx, I just think so.

Just my .02
Albert

Share this post


Link to post
Share on other sites
quote:
Original post by thec
I will code a SW renderer later this year if plans go to reality, I have done this a couple of times before, and the basic thing why I want to do that is because I want to have fun.

I don''t neccessary need to push X millions triangles to think that I''m having a good time, pushing 5 triangles where I know every pixel is out there for a reason, and doing everything by myself, that''s my reward.

Agreed, I don''t plan to try to make some cool game demos which I want to send in to a publisher/gamestudio to get me a job (the chance is so little you succeed with such a task anyway).. I''m just programming for the fun of it, and I don''t think programming against an API is more fun than doing every part of the pipeline for yourself.

There is no limits except speed when you make a software renderer... and I don''t count time when I''m making hobby projects since I''m basicly doing it to spend time :-)

Same goes for audio. While I''m using fmod I''m eager to learn how to write a softsynth. However, I''ve always been more interested in the pixels than in the samples anyway :-)

Just some ideas... if it''s hobby programming, do what you think is fun, not "best" because some other dudes think so.

I''m not telling you software rendering must indeed be more fun than programming opengl or directx, I just think so.

Just my .02
Albert


The thing for me is, I am a hobby programmer heheh , and i just always wanted to know how everything really works under the hood. Sometimes its like make a function call that draws something to the screen sometimes just feels too simple and its like (How did it just do that) thats the reason why to me, I think that maybe making a software renderer might be a good thing. I''ll learn whats happening and how those graphic APIs do their thing. I was running through a few other threads and i noticed that they said that, learning to make your own software renderer is not only challenging but in the end, you get a good idea of how those Graphics API''s do their stuff. I mean its not like i''m trying to make something to match up to hardware acceleration (which i''m not sure even if it''s possible and even if it were (i''d cause a headache) ) but i just think that maybe it might be a useful skill

no theory`

Share this post


Link to post
Share on other sites
Guest Anonymous Poster
quote:
Original post by GamerSg
A software renderer is like making your own graphics api which is pretty much pointless these days if you are making a game.



You may check out <a href="http://www.radgametools.com/pixomain.htm">pixomatic</a>. As I believe it sw rendering gives you some oportunity to add some features in your games wich are not supported by your consumer hardware. Not everybody own a high-end graphic board and some low cost PC are still sold with some low-end 3D adapters (S3 and so on). Since those have a fairly good processor then it''s probably better to have your game running in software than to have it not running at all.

And of course a sw rasterizer is a fun project

RS_Hybrid --> :

Beyond that you don''t learn how to program when programming anything (ranging from the "hello world" program to the last generation multidimensional database manager system). You only learn how to actually *do* thing.

If you want to learn how to program then you''ll need to check some C (or C++ or pascal or delphi or whatever language you want) book in order to understand how things work and why they work this way. And I assume you already do

Yours,

--
Emmanuel Deloget

Share this post


Link to post
Share on other sites