Duke4.net Forums: PolymerNG - Xbox One and Windows 10 - Duke4.net Forums

Jump to content

  • 41 Pages +
  • 1
  • 2
  • 3
  • 4
  • Last »
  • You cannot start a new topic
  • You cannot reply to this topic

PolymerNG - Xbox One and Windows 10

#31

View PostSpiker, on 23 April 2016 - 11:54 PM, said:

The panes are above the windows! This is terrible! Posted Image Just kidding, great job! Posted Image

That is on my list of bugs, surprisingly guys I don't have many more known bugs to fix. I want to clear my list but really soon I'm going to start working on the XB1 launcher to prepare for a binary release. I'm also feature complete I believe except for mirrors.

I have updated the PolymerNGPublic repository to P4 CL 141 which includes all the stuff I have posted thus far, and brings PolymerNG codebase up to Duke4 repository 20160412-5700. For the people who are using and running from the code, one of the new additions I have is the ability to run the different expansions and mods. If you look at this enum in game.cpp

enum DukeExpansionType
{
	DUKE_EXPANSION_ATOMIC = 0,
	DUKE_EXPANSION_DC,
	DUKE_EXPANSION_VACATION,
	DUKE_EXPANSION_NW,
	DUKE_MOD_BLOODCM
};

DukeExpansionType currentDukeExpansion = DUKE_EXPANSION_ATOMIC;


Switch the enum value accordingly to switch between the different expansions and Blood. So to run the different expansions, from the code(this does NOT represent the complexity of the final deployment system, this is just here because there is a lack of a deployment system at the moment; besides visual studio). To play "Duke it out in DC, Duke Vacation or Nuclear Winter, as it stands right now you need to have bought the Megaton edition. Copy your "addons" folder to "DukeNukem/DukeNukem/Assets/DukeData/"

If you want to play BloodCM, make a folder in the "DukeData" folder called "Mods", then make a folder inside of Mods called "bloodcm" and copy all the assets there. So your final path will look like "DukeNukem/DukeNukem/Assets/DukeData/mods/Bloodcm".

Then you should be able to switch the project configuration to "Release"(or debug if you want to dev), and hit run and deploy to the Xbox One if you have followed the config steps in the first post.

Before releasing binaries I will have a front end xml style launcher, that will work on the XB1 and Windows configurations.

This post has been edited by icecoldduke: 24 April 2016 - 09:39 AM

3

#32

Another thing I want to point out is how much I love being able to use the Graphics Analyzer(Pix) with PolymerNG. Since PolymerNG is Direct3D 11 it makes debugging a lot easier.
Posted Image

This post has been edited by icecoldduke: 24 April 2016 - 10:48 AM

1

User is offline   Hendricks266 

  • Weaponized Autism

  #33

View Posticecoldduke, on 24 April 2016 - 09:07 AM, said:

enum DukeExpansionType
{
	DUKE_EXPANSION_ATOMIC = 0,
	DUKE_EXPANSION_DC,
	DUKE_EXPANSION_VACATION,
	DUKE_EXPANSION_NW,
	DUKE_MOD_BLOODCM
};

DukeExpansionType currentDukeExpansion = DUKE_EXPANSION_ATOMIC;


You're reinventing the wheel here. We already have systems to detect and select from GRP files, including these four and more. The logic is mostly separate from the startup window display code, but you may need to cross-reference the three variants we have (Win32, GTK2, and Cocoa). Also note that I am going to refactor this code for the Bombshell prequel to add some sorely needed features.

Instead of hardcoding a mod definition, see if there is a way you can pass in a string as command line arguments that the binary can interpret as usual. For example, every app built to run from the Wii Homebrew Channel has a meta.xml that can contain a command line.
0

#34

View PostHendricks266, on 24 April 2016 - 10:48 AM, said:

You're reinventing the wheel here. We already have systems to detect and select from GRP files, including these four and more. The logic is mostly separate from the startup window display code, but you may need to cross-reference the three variants we have (Win32, GTK2, and Cocoa). Also note that I am going to refactor this code for the Bombshell prequel to add some sorely needed features.

I had to strip out the findfiles code since those Win32 functions aren't available in UWP apps. I have to write UWP equivalent storage functionality, I just haven't done it yet.
I don't even know if I can search the app installation folder, I might only be able to search the user storage. If that is the case I will add a system that will be easy for mod guys to be able to add mods to the frontend launcher. I haven't talked about this much because I haven't looked into it much yet. No matter what though the method above is only a interim solution.

EDIT:
This looks promising, but again this a next milestone issue.
https://msdn.microso...#code-snippet-2

Quote

Instead of hardcoding a mod definition, see if there is a way you can pass in a string as command line arguments that the binary can interpret as usual.

UWP apps can't use the command line :D.

This post has been edited by icecoldduke: 24 April 2016 - 11:01 AM

0

User is offline   Hendricks266 

  • Weaponized Autism

  #35

View Posticecoldduke, on 24 April 2016 - 10:53 AM, said:

UWP apps can't use the command line :D.

Doesn't matter. Just read in a text file and parse its contents into argv/argc and pass them to app_main.

View Posticecoldduke, on 24 April 2016 - 10:53 AM, said:

If that is the case I will add a system that will be easy for mod guys to be able to add mods to the frontend launcher.

Please, just use the functionality of the existing startup window: the game dir selector. Leave the content definition systems to us.

EDIT: I would be glad to hear your input and ideas, but I don't want to be stuck supporting systems I don't like in order to maintain mod compatibility, and I can't bring myself to merge code I don't like.

This post has been edited by Hendricks266: 24 April 2016 - 11:10 AM

0

#36

View PostHendricks266, on 24 April 2016 - 11:02 AM, said:

Doesn't matter. Just read in a text file and parse its contents into argv/argc and pass them to app_main.

Please, just use the functionality of the existing startup window: the game dir selector. Leave the content definition systems to us.

I have thought about a autoexec.cfg option. The existing startup window is gone, I can't use any of the Win32 form stuff, I plan making a equivilant launcher with UWP forums, that utilizes the same content definition system as you guys have; This can only happen if I can enumerate over files in the app installation folder. I haven't done much research into this yet, which is why I have a half assed interim solution in place :D.

Quote

EDIT: I would be glad to hear your input and ideas, but I don't want to be stuck supporting systems I don't like in order to maintain mod compatibility, and I can't bring myself to merge code I don't like.

I have no new functionality to add, as far as I'm concerned the system you guys have in place is fantastic. I just don't know if I can enumerate over files in the installation folder, if I can't do that I have to come up with something else and I would love to hear your input on the subject; but again this is a future issue.

This post has been edited by icecoldduke: 24 April 2016 - 11:12 AM

0

User is offline   Hendricks266 

  • Weaponized Autism

  #37

I don't mean the literal startup window display, I know that UWP has an entirely separate API from classic Win32. I mean the feature of selecting a "Custom game content directory".

We already have an "autoexec.cfg" for console options.

(Also see my edit above.)
0

#38

View PostHendricks266, on 24 April 2016 - 11:12 AM, said:

We already have an "autoexec.cfg" for console options.

If you guys have that in place already, then I have no reason to believe it won't work in PolymerNG I just haven't tried it yet.

This post has been edited by icecoldduke: 24 April 2016 - 11:31 AM

0

User is offline   Hendricks266 

  • Weaponized Autism

  #39

It's not mod loading functionality, it modifies cvars at startup.
0

#40

View PostHendricks266, on 24 April 2016 - 11:48 AM, said:

It's not mod loading functionality, it modifies cvars at startup.

I know :D. So for the launcher we need to have a simpler interface that you can navigate with a controller, do you have any ideas on how we can keep existing functionality but make a clean interface for the console?
0

User is offline   TerminX 

  • el fundador

  #41

View Posticecoldduke, on 24 April 2016 - 12:36 PM, said:

I know :D. So for the launcher we need to have a simpler interface that you can navigate with a controller, do you have any ideas on how we can keep existing functionality but make a clean interface for the console?

In HTTKC I just did a cover flow with images of the game boxes.
0

User is offline   Hendricks266 

  • Weaponized Autism

  #42

A subfolder ("Custom game content directory") corresponds to a game box.
0

#43

Alright so I fixed the E1L2 geo bug that you guys see in the last pic I posted. Looks like the next step is the front end launcher, then the deployment tool and then a release.

This post has been edited by icecoldduke: 24 April 2016 - 02:43 PM

0

User is offline   Micky C 

  • Honored Donor

#44

I thought you were originally planning on using directx 12 for polymerNG, not directx 11? Why the change?
0

#45

View PostMicky C, on 24 April 2016 - 03:50 PM, said:

I thought you were originally planning on using directx 12 for polymerNG, not directx 11? Why the change?

I was originally targeting Direct3D 12 because it would give me more granular control over the commands I send to the GPU. I switched to Direct3D 11.3 so I could run on the Xbox One. The switch to Direct3D 11.3 also has the added benefit of allowing more people to run PolymerNG. I want to emphasise that the project will not suffer from the API change. The only benefit that Direct3D 12 would have had over Direct3D 11.3 would be a SLIGHT performance increase during the world rendering pass, and a possible SLIGHT increase during the shadow pass. Other then that, deferred lighting, HDR, ssao, etc will work the exact same way as it would have on Direct3D 12.

For those interested:
Direct3D 11.3 feature set
MSDN Direct3D 11.3
As a side note if a PC has the same hardware as a Xbox one, the Xbox One will actually run faster when I get in virtual texturing because of the unified memory architecture
MSDN Direct3D 11.3 Unified Memory

This post has been edited by icecoldduke: 24 April 2016 - 04:50 PM

1

User is offline   Micky C 

  • Honored Donor

#46

The link is broken; the page can't be found apparently.

Are there still plans to release a vulkan version of polymerNG for linux and mac down the road? I ask because there's no mention of vulkan in this new thread.
0

#47

View PostMicky C, on 24 April 2016 - 04:34 PM, said:

The link is broken; the page can't be found apparently.

Are there still plans to release a vulkan version of polymerNG for linux and mac down the road? I ask because there's no mention of vulkan in this new thread.

Fixed the links. After EVERYTHING is working, I plan on doing either a Vulkan or OpenGL port to support the Linux guys. For now Linux users who have a Xbox One will be able to deploy to there Xbox One from Wine or similar Windows emulation software.

Some of you might be confused why I choose the Xbox One, and the answer to that is simple. If your shit runs on one Xbox One it runs on ALL Xbox One's. It's easier to make mods, because you don't have to worry about different hardware might cause your mods to run differently. This can be very powerful and I think it might open the doors to more people being able to run a next gen Duke Nukem run running on EDuke32. Not everyone has a nice computer that can run PolymerNG.

As long as you have some kind of tablet that can run the app manifiest build tool and push utility, you can get your data over to the Xbox with ease.

There will be PC Direct3D 11 builds that will ship along with the Xbox One builds, but I hope everyone really starts to use the Xbox One builds. It really will be easier for you guys to develop on.

This post has been edited by icecoldduke: 24 April 2016 - 05:04 PM

0

User is offline   Mblackwell 

  • Evil Overlord

#48

Edit: My reading comprehension sucks but I'll leave this here anyway.
Spoiler

0

#49

View PostMblackwell, on 24 April 2016 - 05:37 PM, said:

Edit: My reading comprehension sucks but I'll leave this here anyway.
Spoiler


Unlike in the vanilla Eduke32 codebase, the rendering api is abstracted from the renderer into a RHI layer.

Here is the code for the PolymerNG Renderer, there is no Direct3D 11 or any other rendering api in this code, all rendering is accessed via the BuildRHI variable.
https://github.com/j...d/src/PolymerNG

Here is the RHI layer, were the Direct3D 11 code resides
https://github.com/j.../RHI/Direct3D11

Here is also the old Direct3D 12 RHI layer
https://github.com/j.../RHI/Direct3D12

The renderer access the RHI layer from this class:
class BuildRHI
{
public:
		virtual void Init()= 0;

	virtual void SetImageForContext(int rootIndex, const BuildRHITexture *image)= 0;
	virtual void SetPSOForContext(class GraphicsContext& Context, BuildRHIPipelineStateObject *pso)= 0;
	virtual BuildRHITextureFormat GetRHITextureFormat(BuildImageFormat format)= 0;
	virtual int GetImageBitsFromTextureFormat(BuildRHITextureFormat format)= 0;
	virtual BuildRHIPipelineStateObject *CreatePipelineStateObject()= 0;
	virtual BuildRHIShader *AllocateShaderObject()= 0;
	virtual const BuildRHITexture* LoadTextureFromMemory(const std::wstring &textureName, size_t Width, size_t Height, BuildRHITextureFormat Format, const void* InitData, bool allowCPUWrites = false)= 0;
	virtual const BuildRHITexture* LoadTexture3DFromMemory(const std::wstring &textureName, size_t Width, size_t Height, size_t Depth, BuildRHITextureFormat Format, const void* InitData, bool allowCPUWrites = false)= 0;
	virtual void SetShader(BuildRHIShader *shader)= 0;
	virtual void SetConstantBuffer(int index, BuildRHIConstantBuffer *constantBuffer)= 0;
	virtual void DrawUnoptimized2DQuad( BuildRHIUIVertex *vertexes)= 0;
	virtual BuildRHIMesh *AllocateRHIMesh(int vertexSize, int numVertexes, void * initialData, bool isDynamic)= 0;
	virtual void UpdateRHIMesh(BuildRHIMesh *mesh, int startVertex, int vertexSize, int numVertexes, void *initialData)= 0;
	virtual void AllocateRHIMeshIndexes(BuildRHIMesh *mesh, int numIndexes, void * initialData, bool isDynamic)= 0;
	virtual void SetRHIMeshIndexBuffer(BuildRHIMesh *mesh, BuildRHIMesh *parentMesh)= 0;
	virtual BuildRHIConstantBuffer *AllocateRHIConstantBuffer(int size, void *initialData)= 0;
	virtual void DrawUnoptimizedQuad(BuildRHIShader *shader, BuildRHIMesh *mesh, int startVertex, int numVertexes)= 0;
	virtual void DrawIndexedQuad(BuildRHIShader *shader, BuildRHIMesh *mesh, int startVertex, int startIndex, int numIndexes)= 0;
	virtual void SetDepthEnable(bool depthEnable)= 0;
};



So this code is entirely very portable. One could add Vulkan support without touching anything in the PolymerNG folder. You would just have to implement the BuildRHI class for Vulkan. More to the point though I'm trying to get more people to come into the fold, and the fact is console support might do that. I haven't forgot Linux guys, but the fact is the developer tools are more robust on Direct3D 11, and even if I'm wrong about Xbox One support bringing in more people I can get the renderer solid easier on Direct3D 11 then I can on OGL or Vulkan. It makes no difference that PolymerNG is using Direct3D 11 now instead of Direct3D 12, adding Vulkan support is no influenced by Direct3D 11 support.

This post has been edited by icecoldduke: 24 April 2016 - 06:19 PM

4

User is online   Danukem 

  • Duke Plus Developer

#50

icecoldduke, you should know that at least some of us are convinced that you know what you are doing :D
I enjoy reading your replies when people challenge your methodology, but I hope it isn't taking time away from development.
3

User is offline   MusicallyInspired 

  • The Sarien Encounter

#51

I'm confused why you were favouring DX12 in the first place if going to DX11(.3) is not much of a difference? Just a case for using the latest and greatest? Just because I remember lamenting that I couldn't run it if it was DX12-only, back when I wasn't running Win10.

Not that I'm criticizing. I, too, respect your work and am looking forward to it. :D

This post has been edited by MusicallyInspired: 24 April 2016 - 07:15 PM

2

#52

View PostMusicallyInspired, on 24 April 2016 - 07:13 PM, said:

I'm confused why you were favouring DX12 in the first place if going to DX11(.3) is not much of a difference? Just a case for using the latest and greatest? Just because I remember lamenting that I couldn't run it if it was DX12-only, back when I wasn't running Win10.

Not that I'm criticizing. I, too, respect your work and am looking forward to it. :D

Simply put I was wrong for thinking Direct3D 12 was a good choice. The little performance increase I would have got from using the API, doesn't outway how many people it would ostracize. The more people we can get to play PolymerNG the better.

View PostTrooper Dan, on 24 April 2016 - 06:43 PM, said:

icecoldduke, you should know that at least some of us are convinced that you know what you are doing :blink:
I enjoy reading your replies when people challenge your methodology, but I hope it isn't taking time away from development.

I enjoy when people challenge my solutions to various problems. By having to post a response to someone's criticism, forces me to justify my solution. This alone can lead to great things. So please, no matter your technical level and experience, keep the critiques and feedback coming :yucky:.

This post has been edited by icecoldduke: 24 April 2016 - 08:52 PM

4

User is offline   Plagman 

  • Former VP of Media Operations

#53

View Posticecoldduke, on 23 April 2016 - 09:27 PM, said:

That is correct I am using the same octagon code to draw skies as in Polymer.

To answer your question, I do have some ideas on how to get the "paper" sky to look just like it does in classic. It should be easy enough if its implemented as a screenspace effect, rendered before everything else without depth enabled. I plan on doing all of that in a later milestone, this milestone is just getting everything up and running.


I posted about that in the other thread with more details, but for skies you really want to actually draw the correct ceiling/floor geometry and do the screen-space effect when shading these areas; the current Polymer approach of drawing in the same buffer as the level in a pre-pass is what causes a bunch of things to incorrectly render through skies when they shouldn't, prevents multiple skies to render properly, and prevents portal effects to properly work in mods since the sky pass for the second drawrooms just draws over the first one. Polymost does this correctly, on the geometry part at least.
6

#54

View PostPlagman, on 25 April 2016 - 10:17 AM, said:

I posted about that in the other thread with more details, but for skies you really want to actually draw the correct ceiling/floor geometry and do the screen-space effect when shading these areas; the current Polymer approach of drawing in the same buffer as the level in a pre-pass is what causes a bunch of things to incorrectly render through skies when they shouldn't, prevents multiple skies to render properly, and prevents portal effects to properly work in mods since the sky pass for the second drawrooms just draws over the first one. Polymost does this correctly, on the geometry part at least.

I accidentally clicked on the "decrease reputation button", not sure how to undue it. I agree with everything you said, doing the screenspace effect on the geo is the right way to do it. I'll look at that after I get mirror's working.

This post has been edited by icecoldduke: 25 April 2016 - 10:37 AM

2

User is offline   Mblackwell 

  • Evil Overlord

#55

I balanced it out for you.
1

User is offline   Micky C 

  • Honored Donor

#56

View Posticecoldduke, on 24 April 2016 - 04:00 PM, said:

As a side note if a PC has the same hardware as a Xbox one, the Xbox One will actually run faster when I get in virtual texturing because of the unified memory architecture


I remember Plagman saying that for equal scenes without any fancy effects, polymer (when finished and optimized) would render the game faster than polymost. Would this be true or would polymerNG require fairly decent hardware, regardless of whether fancy effects are used or not?
0

#57

View PostMicky C, on 25 April 2016 - 05:30 PM, said:

I remember Plagman saying that for equal scenes without any fancy effects, polymer (when finished and optimized) would render the game faster than polymost. Would this be true or would polymerNG require fairly decent hardware, regardless of whether fancy effects are used or not?

PolymerNG will be faster then polymer, and faster then Polymost. I need to point out that Virtual Texturing won't be considered a "fancy effect", it will be considered a required rendering system.

I should clarify, even though I am using the Direct3D 11 API, on the XB1 were limited to the Direct3D 10 feature set. So a min spec for PolymerNG will be Windows 7 with a card that supports the Direct3D 10 feature set.

This post has been edited by icecoldduke: 25 April 2016 - 08:00 PM

2

#58

Another progress video: I got sector and sprite shading/palette working. I fixed the z-fighting on the wall sprites, this shows the sky working. This a 6 minute play through of the first level of Nuclear Winter on the Xbox One.

Robert was talking shit about Duke3D about half way through, but he played a couple rounds before and he's still play Nuclear Winter right now :angry:.



This post has been edited by icecoldduke: 26 April 2016 - 03:42 PM

5

User is offline   TON 

#59

Wall mask bug in the minute 5:17 :angry:

This post has been edited by TON: 27 April 2016 - 02:51 AM

0

#60

The number question I get asked about PolymerNG is how does Clear the Coast run, and I have intentionally avoided that question cause that map used to a) crash the engine and :angry: run like 2-5fps. I have been toying around with using the EDuke32 classic renderer to help me do occlusion culling. I have that system about 30% working, but I have gained huge performance increases thus far.

In regular Polymer just off the EDuke32 branch, clcoast runs at 32fps(1920x1080). PolymerNG already faster then Polymer! PolymerNG on the PC runs at 55fps(2560 x1440)

Clear The Coast
XB1 PolymerNG - Resolution 1920 x 1080
* 15fps

PC PolymerNG - Resolution 2560 x1440
* 55fps

You will see some geo cut in and out at the edge of video, this is a bug with the new occlusion system.


EDIT:
Just played through Deja Vu on Nuclear Winter the game runs at 60fps on the XB1.

This post has been edited by icecoldduke: 27 April 2016 - 04:39 PM

6

Share this topic:


  • 41 Pages +
  • 1
  • 2
  • 3
  • 4
  • Last »
  • You cannot start a new topic
  • You cannot reply to this topic


All copyrights and trademarks not owned by Voidpoint, LLC are the sole property of their respective owners. Play Ion Fury! ;) © Voidpoint, LLC

Enter your sign in name and password


Sign in options