• Content count

  • Joined

  • Last visited

Community Reputation

166 Neutral

About T_ice

  • Rank
  1. There is no right anwser to your original question Warnexus.   It depends greatly on your project. For example, the current professional product I am working on has well over 12.000 classes and more than 25 million lines of code (excluding the generated classes and lines of code). This might seem a lot, but we are using the SOLID-priniciple, which greatly reduces complexity and improves maintainability. Each day many new classes are created and existing ones are deprecated.   Most classes can be printed on a A4 paper and are very simple in nature. One other advantage is that we get very few merge conflicts and those we do get are solved within a minute.
  2. With detour I meant filling up a G-Buffer that contains the depth or position information of the entire screen.   Thanks for providing the links, I have seen them before but never full read them.
  3. Hello,   I have been reading up on Light Indexed Deferred Rendering (LIDR) but I couldn't find an answer on how to handle ambient occlusion.   What options do I have here? Is Screen-space ambient occlusion (SSAO) still a feasible option (albeit via a detour)?     Thanks in advance for your time.  
  4. Hello MyMikeD, Are you using the D3DImage as explained in this article: [url="http://www.codeproject.com/Articles/28526/Introduction-to-D3DImage"]Introduction to D3DImage[/url]? I have also tried it before and it worked for me. In the end, getting WPF and SlimDX (or SharpDX) to work together is some narly business. I never actually got them to work together in the way I wanted (WPF dynamic framerate controlled my own framerate). In the end I dropped it all together and just did it myself with SlimDX. In case you can't get it to work, there is also the option of using an overlaying WPF windows on top of your 'Render'-window (which can be native). By making the WPF window transparent, borderless and on top, it will appear to be merged with render-window. That way you can let the Render-window render on a desirable 60 Hz frame rate and WPF performs in its own terms. Desktop Windows Manager (DWM) takes care of the rest for you, only during resizing the render window the user might see some black borders as artifacts, but if that doesn't matter to you, you are set.
  5. Hello Sean, What you describe seem to be synchronization issues, exactly what Adam described. Also WinForms uses a [url="http://msdn.microsoft.com/en-us/library/system.windows.forms.windowsformssynchronizationcontext.aspx"]SynchronizationContext[/url]. There is nothing wrong with a design where multiple threads work together via a shared variables, but you do need to synchronize the access to this variable. You can do this with the 'lock'-keyword integrated in the C# language. One way I do this is: [CODE] public class SynchronizedDataHolder<T> { public Object SynchronizationObject { get; set; } private T _data = default ( T ); public T Data { get { lock ( SynchronizationObject ) { return _data; } } set { lock ( SynchronizationObject ) { _data = value; } } } public SynchronizedDataHolder ( ) { SynchronizationObject = new Object ( ); } } [/CODE] Now you have a synchronized data holder class, which you can get and set once you provided the instance to each worker. Lets see how this fits in a program: [CODE] public class Program { public ManualResetEventSlim ExitSignal { get; private set; } public SynchronizedDataHolder<Double> DataHolder { get; private set; } public Task [ ] Workers { get; private set; } private void Worker_Callback ( ) { while ( !ExitSignal.IsSet ) { // Retrieve the current value in a synchronized method Double value = DataHolder.Data; // Emulate some heavy operation... Thread.SpinWait ( 1000000 ); // Store the result back in the shared data holder, overwriting the result ignoring any concurrency issues DataHolder.Data = value + 0.1D; } } public void StartWorkers ( ) { Workers = Enumerable .Range ( 0 , 10 ) .Select ( index => Task.Factory.StartNew ( Worker_Callback ) ) .ToArray ( ); } public void StopWorkers ( ) { ExitSignal.Set ( ); Task.WaitAll ( Workers ); } public Program ( ) { DataHolder = new SynchronizedDataHolder<Double> ( ); ExitSignal = new ManualResetEventSlim ( ); } public static void Main ( ) { Program program = new Program ( ); program.StartWorkers ( ); // Sleep for approximately 10 seconds Thread.Sleep ( 10000 ); program.StopWorkers ( ); } } [/CODE] I haven't run this program, as I am writing it from my IPhone. But this is one way to synchronize data access. This example doesn't show how to deal with concurrency, nor does it display multiple readers and single writer access (use the ReaderWriterLockSlim for that). I hope this helps a bit further. Don't switch to C++ for this issue, it won't solve anything. I am using C#, TPL and async/await on daily bases without any problems. Infact I love it!
  6. I have a Bachlor degree in Computer Science (Embedded System Engineering). I strongly recommend to take that route instead of some specialized institute like the ones you mentioned. The reason is that if you may not get a job in the Interactive Entertainment Industry right away, but you can still apply you skills in a different area, because you are broadly educated. I am also skeptical that Full Sail or Digipen are able to teach you to programming any better than any other university could (I cannot speak for the computer graphics or game designing). Many concepts and patterns are widely applicable in the field programming or designing and are definitely not specific to game development. Perhaps courses related to Business and management might be narrowed down towards game development. I think game studios have a bigger pool of applicants to choose from, so they can basically cherry pick. The other computer science related industries are screaming for qualified personel, which gives you a nice opportunity to gain that valuable experience everyone is asking for. As for payment, it is matter of supply and demand. Considering there is a global shortage for qualified/experienced programmers, you are settled with a CS degree regardless where you live (safe Antarctica ). Maybe because game companies have a bigger supply of applicants they can offer a lower salary, but this is purely speculations on my end. I think that education only brings you in half way into this industry, it is CV which sells you in the end. If you can show you worked on a shipped game in your spare time, that says so much more than scoring 100% in a programming or designing course. Standing out is key here and it doesn't have to be triple-A title or anything. Good luck with your choice!
  7. Generating terrain procedurally with the help of compute shaders and perlin noise. http://t.co/TMcQXdf
  8. Hello, I got an issue with creating an instance of a geometry shader with stream output (and no rasterization stream). At runtime there is no problem and the shader is created succesfully without any warnings. When I try to profile my application with PIX it seems unable to playback the [url="http://msdn.microsoft.com/en-us/library/ff476510(v=VS.85).aspx"]CreateGeometryShaderWithStreamOutput[/url] method call for unknown reasons. PIX shows the following message box at the point: [attachment=5013:PIX_CreateGeometryWithStreamOutput_E_Fail.png] The shader is rather simple and straight forward, I doubt it even is the problem: [code] struct GSI_Casing { uint X8_Y8_Z8_Case8 : UV_Position; }; struct GSO_Casing { uint X8_Y8_Z8_Case8 : UV_Position; }; [maxvertexcount(1)] void GS_Casing (point GSI_Casing input[1], inout PointStream<GSO_Casing> stream) { uint voxelCase = input[0].X8_Y8_Z8_Case8 & 0x000000FF; if (voxelCase > 0x00 && voxelCase < 0xFF) { stream.Append((GSO_Casing)input[0]); } } [/code] This problem is annoying because it completely prevents further debugging when my application becomes more complex later on. I have noticed other people encountered the same thing, but none have found a solution yet. Is there anyway to make PIX more verbose regarding the real problem it is encountering? I created the ID3D11Device with the D3D11_CREATE_DEVICE_DEBUG flag (switching it off didn't matter, error remains). I am using the SDK version of June 2010 and PIX 9.29.1962.0000 (32-bit). Thanks for reading. Regards, T_Ice
  9. [HLSL] first time with MRT's

    Hello Freeworld, [quote][color=#1C2837][size=2]When setting multiple render targets, do they reset after calling draw primitive. Or do I have to call something like SetRenderTarget(index, NULL) ? to get rid of any extra render targets?[/size][/color][/quote] No, any draw call won't change the state of the device, so all your render targets remain bound in the way they were until you call [color=#1C2837][size=2]SetRenderTarget(index, NULL) or a device state reset/change.[/size][/color] [color=#1C2837][size=2] [/size][/color] [color=#1C2837][size=2] [/size][/color] [color=#1C2837][size=2][quote][/size][/color][color=#1C2837][size=2]2: In the pixel shader, do you have to output the same amount of values as the amount of render targets you set?[/size][/color][color=#1C2837][size=2][/quote][/size][/color] [color=#1C2837][size=2] [/size][/color] [color=#1C2837][size=2]I think not writing not every SV_Target# register that is bound should work, the device might store a warning in its message queue, but the draw call will probably succeed. However the SV_Target registers that aren't getting written, will remain unchanged (pertain their values). If you write to more SV_Target registers than are bound, should work aswell, but again with a warning.[/size][/color] [color=#1C2837][size=2] [/size][/color] [color=#1C2837][size=2] [/size][/color] [color=#1C2837][size=2][quote][/size][/color][color=#1C2837][size=2]3: does the hlsl compiler, for lack of better words, normalize values that must be within a certain range... ie if output float4(655, 577, 878, 900) as a color value, will they retain they're value? [/size][/color][color=#1C2837][size=2][/quote][/size][/color] [color=#1C2837][size=2] [/size][/color] [color=#1C2837][size=2]No, fxc.exe will not do that for you, because it doesn't know what the format is of render target that is ought to be bound to the device. The DeviceContext will probably clamp the values the fall beyond the domain.[/size][/color] [color=#1C2837][size=2] [/size][/color] [color=#1C2837][size=2] [/size][/color] [size="2"][color="#1c2837"]BTW, you can always profile your own application with PIX for example (use a debug-flagged device though) and see what happens. It also allows you to see the state of the entire device between each draw call for example[/color][/size] [color=#1C2837][size=2] [/size][/color] [color=#1C2837][size=2] [/size][/color] [color=#1C2837][size=2] [/size][/color]
  10. That was a great devday, lots of brainfood to process on the way home.