• Announcements

    • khawk

      Download the Game Design and Indie Game Marketing Freebook   07/19/17

      GameDev.net and CRC Press have teamed up to bring a free ebook of content curated from top titles published by CRC Press. The freebook, Practices of Game Design & Indie Game Marketing, includes chapters from The Art of Game Design: A Book of Lenses, A Practical Guide to Indie Game Marketing, and An Architectural Approach to Level Design. The GameDev.net FreeBook is relevant to game designers, developers, and those interested in learning more about the challenges in game development. We know game development can be a tough discipline and business, so we picked several chapters from CRC Press titles that we thought would be of interest to you, the GameDev.net audience, in your journey to design, develop, and market your next game. The free ebook is available through CRC Press by clicking here. The Curated Books The Art of Game Design: A Book of Lenses, Second Edition, by Jesse Schell Presents 100+ sets of questions, or different lenses, for viewing a game’s design, encompassing diverse fields such as psychology, architecture, music, film, software engineering, theme park design, mathematics, anthropology, and more. Written by one of the world's top game designers, this book describes the deepest and most fundamental principles of game design, demonstrating how tactics used in board, card, and athletic games also work in video games. It provides practical instruction on creating world-class games that will be played again and again. View it here. A Practical Guide to Indie Game Marketing, by Joel Dreskin Marketing is an essential but too frequently overlooked or minimized component of the release plan for indie games. A Practical Guide to Indie Game Marketing provides you with the tools needed to build visibility and sell your indie games. With special focus on those developers with small budgets and limited staff and resources, this book is packed with tangible recommendations and techniques that you can put to use immediately. As a seasoned professional of the indie game arena, author Joel Dreskin gives you insight into practical, real-world experiences of marketing numerous successful games and also provides stories of the failures. View it here. An Architectural Approach to Level Design This is one of the first books to integrate architectural and spatial design theory with the field of level design. The book presents architectural techniques and theories for level designers to use in their own work. It connects architecture and level design in different ways that address the practical elements of how designers construct space and the experiential elements of how and why humans interact with this space. Throughout the text, readers learn skills for spatial layout, evoking emotion through gamespaces, and creating better levels through architectural theory. View it here. Learn more and download the ebook by clicking here. Did you know? GameDev.net and CRC Press also recently teamed up to bring GDNet+ Members up to a 20% discount on all CRC Press books. Learn more about this and other benefits here.

rainsing

Members
  • Content count

    8
  • Joined

  • Last visited

Community Reputation

135 Neutral

About rainsing

  • Rank
    Newbie
  1. Phew, I finally get the problem solved. We capture the states of the whole pipeline in a StateBlock before rendering our UI, and restore the states after it's done. However, we didn't properly call Release() on this IDirect3DStateBlock9 when the application exits. According to DirectX docs, plus an educated guess, I believe that this StateBlock holds a reference to basically every resource that's current bound to the driver, including all vertex streams, textures for all sampling stages, vertex and pixel shaders, etc. If you fail to release the StateBlock, all these resources won't get released. This perfectly explained why some of our vertex declarations and cubemaps leak even if we called Release() on them. Thank you guys for providing valuable opinions along the way!
  2. [quote name='Hodgman' timestamp='1336745970' post='4939304'] Are you rendering to cube-maps at any point? [/quote] Nope. But I found that if we create the cubemap but don't use it at all(i.e. bind the cubemap using SetTexture()), it will be properly released. However, we do unbind all textures at the end of each frame.
  3. As I continue to investigate the problem, I found something weird. I used PIX to record a diagnostic log. At the very last frame, where all D3D objects are being released, I found out that one of our cubemaps is released this way: Frame 000098 ........PRE: IDirect3DCubeTexture9::Release() Frame 000098 ........POST: <0> IDirect3DCubeTexture9::Release() While other cubemaps are released like this: Frame 000098 ........PRE: IDirect3DCubeTexture9::Release() Frame 000098 ............PRE: RemoveObject(D3D9 Cube Texture, 0x062AAD30, 0x0018E6E0) Frame 000098 ............POST: <> RemoveObject(D3D9 Cube Texture, 0x062AAD30, 0x0018E6E0) Frame 000098 ............PRE: RemoveObject(D3D9 Surface, 0x06272F60, NULL) Frame 000098 ............POST: <> RemoveObject(D3D9 Surface, 0x06272F60, NULL) Frame 000098 ............PRE: RemoveObject(D3D9 Surface, 0x06272ED0, NULL) Frame 000098 ............POST: <> RemoveObject(D3D9 Surface, 0x06272ED0, NULL) Frame 000098 ............PRE: RemoveObject(D3D9 Surface, 0x06272E40, NULL) Frame 000098 ............POST: <> RemoveObject(D3D9 Surface, 0x06272E40, NULL) Frame 000098 ............PRE: RemoveObject(D3D9 Surface, 0x06272DB0, NULL) Frame 000098 ............POST: <> RemoveObject(D3D9 Surface, 0x06272DB0, NULL) Frame 000098 ............PRE: RemoveObject(D3D9 Surface, 0x06272D20, NULL) Frame 000098 ............POST: <> RemoveObject(D3D9 Surface, 0x06272D20, NULL) Frame 000098 ............PRE: RemoveObject(D3D9 Surface, 0x062AAF18, NULL) Frame 000098 ............POST: <> RemoveObject(D3D9 Surface, 0x062AAF18, NULL) Frame 000098 ........POST: <0> IDirect3DCubeTexture9::Release() The main difference here is that the latter call to IDirect3DCubeTexture9::Release() actually removed the texture object and all of its surfaces, but the first call did nothing. And both of them returned a reference count of 0(<0>). That's why our sanity check on the return value of Release() can't catch this type of leak. Of course, PIX marked the texture and the surfaces of the first cubemap as never destroyed, which means they are leaking.
  4. @Ripiz: Thanks for the tip. That's what I am starting to do now. I've completely lost in the irrelevance of the allocIDs.
  5. [left]Well, the D3D debug runtime reports exactly the same allocIDs every time I run. I think this proves that our code is[font="helvetica, arial, verdana, tahoma, sans-serif"][size="2"][color="#282828"] [/color][/size][/font][color=#282828][font=helvetica, arial, verdana, tahoma, sans-serif][size=3][background=rgb(250, 251, 252)]deterministic.[/background][/size][/font][/color][/left]
  6. Has anyone encountered such a situation where, * The D3D9 debug runtime reports memory leaks on application exit, listing all unfreed allocations with their AllocIDs. * Tell D3D to break on one of the allocations using the "Break on AllocID" feature of DX control panel. * With the D3D symbols loaded, we get a complete call stack when the break happens. It turns out the allocation is for a vertex declaration. * We are 100% sure the very vertex declaration IS released during the shutdown process, and the ref count reaches 0 after the release. Is it possible that the D3D runtime is reporting wrong AllocIDs? Or is the "Break on AllocID" feature unreliable?
  7. Thank you for the suggestions. Is PIX the most frequently used profiler in practice? I have heard a lot of people talking about it.
  8. I'm using particle system to present some of the VFX. Each instance of a particle system is treated as a render unit, which has its own vertex buffer, index buffer, texture, world matrix, etc. In most cases, a single particle system maintains less than 50 particles or 100 triangles at any given time, but needs a whole DrawIndexedPrimtives batch. So I end up with more than 2K DIP per frame when there is a large number of special effects. Then I come up with the idea to merge different instances of a particle system into one large render unit. Merging the VB and IB shouldn't be a problem, and also they use the same texture and other render states, the only difficulty is the different world matrices can not be unified. One possible solution, I manually apply those world transformations to corresponding particle systems before filling the vertex buffer, and submit identity as the world matrix to the graphic pipeline. Is this practical? Would someone offer any help? Thanks.