• 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.
Sign in to follow this  
Followers 0
XGT08

Direct3D9 SetViewport not working properly?

6 posts in this topic

Hello,

 

It seems that no matter what I do, SetViewport in Direct3D9 doesn't work for me. For example, if I call SetViewport to map the viewport to the entire render area (Left:0, Top:0, Width: viewWidth, Height: viewHeight, MinZ: 0.0f, MaxZ: 1.0f), it will only render to approximately a quarter if the render area.

 

If I maximize the window, it will render the entire width, but a small gap remains at the bottom. If I resize it again to its original dimensions, it will render again in 1/4 area and the backbuffer is not cleared properly.

 

I would like to mention that I call SetViewport when the window is resized and, also, after the device has been reset. I tried calling SetViewport between BeginScene and EndScene, but with no success.

 

Has anybody had the same problem?

0

Share this post


Link to post
Share on other sites

Post your code for setting the window and backbuffer sizes, and for setting the viewport. Include in the code how you determine the size of the window and backbuffer.

 

My first guess is that you create a window with specified sizes which you use later, assuming those are the width and height of the window client, rather than actually getting the size of the client area.

Edited by Buckeye
0

Share this post


Link to post
Share on other sites

Hello,

 

The code is made a little complicated by the fact that I use a device enumeration class which handles device caps enumeration, window creation etc.

 

But I can tell you that the size of the viewport is determined when I recieve a WM_SIZE message. So the size of the viewport is:

       -Width: LOWORD(lParam)

       -Height: HIWORD(lParam)

 

I checked if the D3DVIEWPORT9 struct instance contains the correct values and indeed it does. Anyway, I will dig a little bit more. I am sure there must be something which I am missing. When I find a solution I will post it here. Thanks!

0

Share this post


Link to post
Share on other sites

Ok. I discovered what the problem was.

I was using a windowed mode device and I was setting the backbuffer dimensions to the screen resolution for a window of 800 by 600. Because the viewport dimensions were being set to the same size and because the backbuffer is much bigger, it makes sense that the backbuffer wasn't being filled properly.

 

Steps to handle window resize properly:

-set Backbuffer dimensions to 0 in the present params struct instance;

-reset device

 

OR check out Buckeye's post below ;)

 

Cheers!

Edited by XGT08
0

Share this post


Link to post
Share on other sites

I can tell you that the size of the viewport is determined when I recieve a WM_SIZE message

 

It's the relationship of the viewport to the backbuffer, not the client area, that's likely creating your problem. That is, the size of the viewport (if you want to Present the entire backbuffer) should match the size of the backbuffer, not necessarily the client area size. Commonly,  though, the backbuffer size is reset when the window is resized, and the viewport is set to the size of the backbuffer.

 

EDIT: cross-posting. Glad you found the problem.

 

EDIT2:

reset the device every time the window is resized and make sure the bacbuffer dimensions match the window's client area dimensions

 

The easiest way to ensure that is to set the present parameters BackBufferWidth and BackBufferHeight to 0. Then:

OnLostDevice(); // whatever your routine is.
HR( device->Reset(&present_params) ); // check for errors
OnResetDevice(); // whatever your routine is.
ResetViewportSize(present_params.BackBufferWidth, present_params.BackBufferHeight);

The device will use the current window client size to set the backbuffer. Use the params to set the viewport.

Edited by Buckeye
0

Share this post


Link to post
Share on other sites

Hello Buckeye,

 

Yes, that is entirely true. Your are right. The problem is caused by the fact that I am not using the entire portion of the backbuffer for rendering. It has nothing to do with stretching. I was hoping that nobody managed to read my last post :D. I was just about to edit it.

 

And again, you are right about handling thw window resize. Thanks a lot!

 

Cheers!

0

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0