示例#1
0
        public override void render()
        {
            BRenderDevice.getDevice().SetRenderState(RenderStates.AlphaBlendEnable, true);
            BRenderDevice.getDevice().SetRenderState(RenderStates.SourceBlend, (int)Microsoft.DirectX.Direct3D.Blend.SourceAlpha);
            BRenderDevice.getDevice().SetRenderState(RenderStates.DestinationBlend, (int)Microsoft.DirectX.Direct3D.Blend.InvSourceAlpha);

            Texture            mask = TerrainGlobals.getTerrainFrontEnd().getSelectedMaskTexture();
            SurfaceDescription sd   = mask.GetLevelDescription(0);

            float validRadius             = sd.Width / 2;
            List <BTerrainQuadNode> nodes = new List <BTerrainQuadNode>();
            int closestX = 0;
            int closestZ = 0;

            {
                // in this node, find the CLOSEST vertex to this actual position.
                BTerrainEditor.findClosestVertex(ref closestX, ref closestZ, ref TerrainGlobals.getEditor().mBrushIntersectionPoint, TerrainGlobals.getEditor().mBrushIntersectionNode);

                TerrainGlobals.getTerrain().getQuadNodeRoot().getTileBoundsIntersection(nodes, (int)(closestX - validRadius),
                                                                                        (int)(closestX + validRadius),
                                                                                        (int)(closestZ - validRadius),
                                                                                        (int)(closestZ + validRadius));
            }
            for (int i = 0; i < nodes.Count; i++)
            {
                nodes[i].renderCursor();
            }


            BRenderDevice.getDevice().SetRenderState(RenderStates.AlphaBlendEnable, false);
        }
示例#2
0
        //CLM Called when a light is moved by the user
        static public void moveLight(int editorObjectIndex)
        {
            int lightIndex = giveLightIndex(editorObjectIndex);

            if (lightIndex == -1)
            {
                return;
            }

            //copy our influence list
            List <worldChunk> wcList = new List <worldChunk>();

            copyList(mLights[lightIndex].mWorldChunksImAffecting, wcList);

            //remove this light from the world grid
            removeLightFromGrid(mLights[lightIndex]);

            //add this light to the world grid
            addLightToGrid(mLights[lightIndex]);

            //merge the two lists
            mergeList(mLights[lightIndex].mWorldChunksImAffecting, wcList);

            //reload affected qns
            for (int i = 0; i < wcList.Count; i++)
            {
                rasterLightsToNode(wcList[i]);
            }

            TerrainGlobals.getTerrain().rebuildDirtyPostDeform(BRenderDevice.getDevice());
        }
示例#3
0
        //------------------------------------------

        public override void render()
        {
            BRenderDevice.getDevice().SetRenderState(RenderStates.AlphaBlendEnable, true);
            BRenderDevice.getDevice().SetRenderState(RenderStates.SourceBlend, (int)Microsoft.DirectX.Direct3D.Blend.SourceAlpha);
            BRenderDevice.getDevice().SetRenderState(RenderStates.DestinationBlend, (int)Microsoft.DirectX.Direct3D.Blend.InvSourceAlpha);


            List <BTerrainQuadNode> nodes = new List <BTerrainQuadNode>();
            int closestX = 0;
            int closestZ = 0;

            {
                // in this node, find the CLOSEST vertex to this actual position.
                BTerrainEditor.findClosestVertex(ref closestX, ref closestZ, ref TerrainGlobals.getEditor().mBrushIntersectionPoint, TerrainGlobals.getEditor().mBrushIntersectionNode);

                TerrainGlobals.getTerrain().getQuadNodeRoot().getTileBoundsIntersection(nodes, (int)(closestX - mDecalRadius),
                                                                                        (int)(closestX + mDecalRadius),
                                                                                        (int)(closestZ - mDecalRadius),
                                                                                        (int)(closestZ + mDecalRadius));
            }
            for (int i = 0; i < nodes.Count; i++)
            {
                nodes[i].renderCursor();
            }


            BRenderDevice.getDevice().SetRenderState(RenderStates.AlphaBlendEnable, false);
        }
示例#4
0
        //light deleted, remove from our manager
        static public void freeLight(int editorObjectIndex)
        {
            int lightIndex = giveLightIndex(editorObjectIndex);

            if (lightIndex == -1)
            {
                return;
            }
            List <worldChunk> wcList = new List <worldChunk>();

            copyList(mLights[lightIndex].mWorldChunksImAffecting, wcList);

            //remove this light from the world grid
            removeLightFromGrid(mLights[lightIndex]);

            //reload affected qns
            for (int i = 0; i < wcList.Count; i++)
            {
                rasterLightsToNode(wcList[i]);
            }

            TerrainGlobals.getTerrain().rebuildDirtyPostDeform(BRenderDevice.getDevice());

            //remove this light from the main list
            mLights.RemoveAt(lightIndex);
        }
示例#5
0
        //----------------------------
        //----------------------------
        #region AO Section Export
        private void exportAOFileList()
        {
            String batchExportLog = outputLog;

            if (batchExportLog == null)
            {
                batchExportLog = Path.Combine(CoreGlobals.getWorkPaths().mLogsDirectory, "batchExportLog." + System.DateTime.Now.ToFileTimeUtc() + ".txt");
            }
            mExportLogStream = new StreamWriter(batchExportLog, true);


            //export settings
            Export360.ExportSettings settings = null;
            if (mUseCustomExportSettings == -1 || mUseCustomExportSettings == 0)
            {
                settings = null;
            }
            else if (mUseCustomExportSettings == 1)
            {
                settings = new Export360.ExportSettings();
                settings.SettingsQuick();
            }
            else if (mUseCustomExportSettings == 2)
            {
                settings = new Export360.ExportSettings();
                settings.SettingsFinal();
            }


            bool createOwnDevice = BRenderDevice.getDevice() == null;

            if (createOwnDevice)
            {
                BRenderDevice.createDevice(this, 640, 480, false);
            }

            GrannyManager2.init();

            for (int fileCount = 0; fileCount < mScenarioFilesToExport.Count; fileCount++)// (string file in ToExportListBox.SelectedItems)
            {
                string scenarioName = mScenarioFilesToExport[fileCount].mFilename;
                string terrainName  = mTerrainFilesToExport[mScenarioFilesToExport[fileCount].mTerrainFileIndex].mFilename;

                bool okExported = TEDIO.TEDtoAOSection(terrainName, scenarioName, outputDir, mAoNumSections, mAoSectionIndex, settings);
            }

            if (createOwnDevice)
            {
                BRenderDevice.destroyDevice();
            }

            mExportLogStream.Close();

            if (mStatusResult == 0)
            {
                File.Delete(batchExportLog);
            }

            clearList();
        }
示例#6
0
        public void preConvertSetup()
        {
            if (savedRenderTarget != null)
            {
                savedRenderTarget.Dispose();
                savedRenderTarget = null;
            }
            if (savedDepthSurf != null)
            {
                savedDepthSurf.Dispose();
                savedDepthSurf = null;
            }

            BRenderDevice.getDevice().RenderState.CullMode = Cull.None;
            BRenderDevice.getDevice().RenderState.ZBufferWriteEnable = false;
            BRenderDevice.getDevice().RenderState.ZBufferEnable = false;
            BRenderDevice.getDevice().VertexDeclaration = VertexTypes.PosW_uv0_uv1.vertDecl;
            BRenderDevice.getDevice().RenderState.AlphaBlendEnable = true;
            BRenderDevice.getDevice().SetRenderState(RenderStates.SourceBlend, (int)Microsoft.DirectX.Direct3D.Blend.SourceAlpha);
            BRenderDevice.getDevice().SetRenderState(RenderStates.DestinationBlend, (int)Microsoft.DirectX.Direct3D.Blend.InvSourceAlpha);

            savedViewport     = BRenderDevice.getDevice().Viewport;
            savedRenderTarget = BRenderDevice.getDevice().GetRenderTarget(0);
            savedDepthSurf    = BRenderDevice.getDevice().DepthStencilSurface;
            BRenderDevice.getDevice().DepthStencilSurface = mDepthStenSurf;

            BRenderDevice.getDevice().SetStreamSource(0, mCompositeVertexBuffer, 0);
            BRenderDevice.getDevice().Indices = mCompositeIndexBuffer;
        }
示例#7
0
        public void renderFull(int w, int h)
        {
            Vector4 v = new Vector4(0, 0, (float)w, (float)h);

            mShader.SetValue(m_fxViewport, v);
            Vector4 v2 = new Vector4(0, 0, 0, 0);

            mShader.SetValue(m_fxDestRegionCoord, v2);
            Vector4 v3 = new Vector4((float)w, (float)h, 0, 0);

            mShader.SetValue(m_fxDestRegionSize, v3);
            Vector4 v4 = new Vector4(1.0f / (float)w, 1.0f / (float)h, 0, 0);

            mShader.SetValue(m_fxInvDestRegionSize, v4);

            Viewport vp = new Viewport();

            vp.X      = 0;
            vp.Y      = 0;
            vp.Width  = w;
            vp.Height = h;
            vp.MinZ   = 0;
            vp.MaxZ   = 1;
            BRenderDevice.getDevice().Viewport = vp;

            mShader.CommitChanges();

            BRenderDevice.beginScene();
            mShader.Begin(FX.DoNotSaveState | FX.DoNotSaveShaderState | FX.DoNotSaveSamplerState);
            mShader.BeginPass(0);
            s_Quad.render();
            mShader.EndPass();
            mShader.End();
            BRenderDevice.endScene();
        }
示例#8
0
        //--------------------------------------------------------------------------
        void renderInit(uint width, uint height, Surface pRenderTargetSurf, bool furthestDepth, Matrix worldToView, Matrix viewToProj)
        {
            BRenderDevice.getDevice().Transform.World = Matrix.Identity;
            BRenderDevice.getDevice().Transform.View = worldToView;
            BRenderDevice.getDevice().Transform.Projection = viewToProj;
            Viewport viewport = new Viewport();

            viewport.X      = 0;
            viewport.Y      = 0;
            viewport.Width  = (int)width;
            viewport.Height = (int)height;
            viewport.MinZ   = 0.0f;
            viewport.MaxZ   = 1.0f;
            BRenderDevice.getDevice().Viewport = viewport;


            BRenderDevice.getDevice().DepthStencilSurface = pDepthStencilSurf;
            BRenderDevice.getDevice().SetRenderTarget(0, pRenderTargetSurf);


            BRenderDevice.getDevice().Clear(ClearFlags.ZBuffer | ClearFlags.Target, furthestDepth ? (unchecked ((int)(0x00000000))) : (unchecked ((int)(0xFFFFFFFF))), furthestDepth ? 0 : 1, 0);

            BRenderDevice.getDevice().SetRenderState(RenderStates.CullMode, (int)Cull.None);
            BRenderDevice.getDevice().SetRenderState(RenderStates.ZEnable, true);
            BRenderDevice.getDevice().SetRenderState(RenderStates.ZBufferFunction, furthestDepth ? (int)Compare.GreaterEqual : (int)Compare.LessEqual);

            //BD3D::mpDev->SetRenderState(D3DRS_HALFPIXELOFFSET, TRUE);
        }
示例#9
0
        void loadRandomTexture(String rootname)
        {
            //do we have a random map?
            if (File.Exists(rootname + ".random.png"))
            {
                TextureHandle RandomTextureFile = BRenderDevice.getTextureManager().getTexture(rootname + ".random.png");
                mRandomTexture = RandomTextureFile.mTexture;

                //Huzzah! We have a random texture!
                //build our mipmap levels internal
                //Surface s = RandomTextureFile.mTexture.GetSurfaceLevel(0);

                //mRandomTexture = Texture(BRenderDevice.getDevice(), s.Description.Width, s.Description.Height, 1, Usage.None, Format.A8R8G8B8, Pool.Default);

                ////copy the data over from the file to our local file
                //GraphicsStream inputStream = RandomTextureFile.mTexture.LockRectangle(0, LockFlags.None);
                //byte* data = (byte*)inputStream.InternalDataPointer;
                //int rectPitch = s.Description.Format;
                //for (int j = 0; j < a.exemplar().recoloredStack(l).height(); j++)
                //{
                //   for (int i = 0; i < a.exemplar().recoloredStack(l).width(); i++)
                //   {
                //   }
                //}
                //RandomTextureFile.mTexture.UnlockRectangle(0);
                ////build our mip-map chain (higher levels contain min of lower 4 pixels)

                //s.Dispose();
                //s =null;
            }
            else
            {
                mRandomTexture = null;
            }
        }
示例#10
0
        public override void render()
        {
            BRenderDevice.getDevice().SetRenderState(RenderStates.AlphaBlendEnable, true);
            BRenderDevice.getDevice().SetRenderState(RenderStates.SourceBlend, (int)Blend.SourceAlpha);
            BRenderDevice.getDevice().SetRenderState(RenderStates.DestinationBlend, (int)Blend.InvSourceAlpha);
            BRenderDevice.getDevice().SetRenderState(RenderStates.CullMode, (int)Cull.None);

            int xRad = mWidth >> 1;
            int zRad = mHeight >> 1;



            List <BTerrainQuadNode> nodes = new List <BTerrainQuadNode>();

            TerrainGlobals.getTerrain().getQuadNodeRoot().getVertBoundsIntersection(nodes, mCenterX - xRad, mCenterX + xRad, mCenterZ - zRad, mCenterZ + zRad);
            for (int i = 0; i < nodes.Count; i++)
            {
                nodes[i].renderWidget(0);
            }


            BRenderDevice.getDevice().SetRenderState(RenderStates.AlphaBlendEnable, false);
            BRenderDevice.getDevice().SetRenderState(RenderStates.CullMode, (int)Cull.CounterClockwise);

            base.render();
        }
示例#11
0
        public override void render()
        {
            if (mPrimitives == null)
            {
                return;
            }

            for (int k = 0; k < mPrimitives.Count; k++)
            {
                //BRenderDevice.getDevice().VertexShader = null;
                //  BRenderDevice.getDevice().PixelShader = null;
                BRenderDevice.getDevice().VertexDeclaration = mPrimitives[k].mVDecl;

                BRenderDevice.getDevice().SetStreamSource(0, mPrimitives[k].mVB, 0, mPrimitives[k].mVertexSize);

                if (mPrimitives[k].mIB != null)
                {
                    BRenderDevice.getDevice().Indices = mPrimitives[k].mIB;
                }

                // And now render the groups with the right textures and materials.
                // BRenderDevice.getDevice().SetTexture(0, null);
                for (int i = 0; i < mPrimitives[k].mGroups.Count; i++)
                {
                    BRenderDevice.getDevice().DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, mPrimitives[k].mNumVerts, mPrimitives[k].mGroups[i].mStartIndex, mPrimitives[k].mGroups[i].mPrimCount);
                }
            }
        }
示例#12
0
        void generateNextDepthLayer(ref Matrix worldToLight)
        {
            //CLM this provides accurate depth peeling results (in ISO view...)
            BRenderDevice.getDevice().Clear(ClearFlags.ZBuffer | ClearFlags.Target, (unchecked ((int)0x00000000)), 0, 0);

            /////////////////////////////////////////////////////////////////////////////
            //[X] step6 GENERATE THE NEXT DEPTH LAYER
            // Render the scene geometry
            // into buffer B/C (for depth)
            // into buffer D (for color)
            // using parallel projection by selecting global ray direction, with reversed depth test
            // If the fragment of the point has larger depth value than buffer C, then it is culled. (this is handled in the shader.)
            mDepthPeelShader.mShader.SetValue(mShaderWVPHandle, worldToLight);
            mDepthPeelShader.mShader.SetValue(mShaderPrevDepthTexture, mDepthBufferC);
            mDepthPeelShader.mShader.BeginPass((int)eShaderPassIndex.eShaderPass6_CompareDepth);
            BRenderDevice.getDevice().SetRenderState(RenderStates.ZBufferFunction, (int)Compare.Greater);

            mOC.Issue(IssueFlags.Begin);

            mScene.renderScene();

            mOC.Issue(IssueFlags.End);
            mDepthPeelShader.mShader.EndPass();

            copyRT0toDepthTexture(mDepthBufferC);
            copyRT1toColorTexture(mCurrentDepthLayerD); //buffer D for color..
        }
示例#13
0
        void render()
        {
            if (mSynthesisMain.mExemplar == null)
            {
                return;
            }



            if (doreinit)
            {
                if (comboBox3.SelectedIndex == 0)
                {
                    mSynthesisMain.reinit(d3dPanel.Width, d3dPanel.Height, 1);
                }
                else if (comboBox3.SelectedIndex == 1 || comboBox3.SelectedIndex == 2)
                {
                    mSynthesisMain.reinit(d3dPanel.Width >> comboBox3.SelectedIndex, d3dPanel.Height >> comboBox3.SelectedIndex, (int)Math.Pow(2, comboBox3.SelectedIndex));
                }
                doreinit = false;
            }
            mSynthesisMain.refreshBuffer();
            BRenderDevice.clear(true, true, unchecked ((int)0x00007700), 1.0f, 0);
            BRenderDevice.beginScene();
            mSynthesisMain.renderBuffer();
            BRenderDevice.endScene();
            BRenderDevice.present();
        }
示例#14
0
        public void create(int width, int height, int numMips, BTerrainCompositeAtlasTexture atlas, int index)
        {
            mAtlas = atlas;

            if (numMips == 0)
            {
                numMips = 1;
            }

            mWidth        = width;
            mHeight       = height;
            mNumMips      = numMips;
            mIndexInCache = index;

            if (mAtlas == null)
            {
                mTextures = new Texture[(int)BTerrainTexturing.eTextureChannels.cSplatChannelCount];
                for (int i = 0; i < (int)BTerrainTexturing.eTextureChannels.cSplatChannelCount; i++)
                {
                    mTextures[i] = new Texture(BRenderDevice.getDevice(), width, height, numMips, Usage.RenderTarget, Format.R5G6B5, Pool.Default);
                }
            }
            else
            {
                mAtlas.getOffsetInfo(index, out mAtlasUVOffset, out mXPixelOffset, out mYPixelOffset);
            }
        }
示例#15
0
 void clearBuffers()
 {
     /////////////////////////////////////////////////////////////////////////////
     //[X] step 2 initlize "depth" buffer B and buffer C to max distance
     BRenderDevice.getDevice().Clear(ClearFlags.Target, (unchecked ((int)0xFFFFFFFF)), 1, 0);
     copyRT0toDepthTexture(mDepthBufferC, false);
 }
示例#16
0
        static public void clearSelectionMask()
        {
            if (mCurrSelectionMask.HasData())
            {
                if (CoreGlobals.getEditorMain().mIMaskPickerUI == null)
                {
                    CoreGlobals.getEditorMain().mIGUI.ShowDialog("MaskLayers");
                }
                CoreGlobals.getEditorMain().mIMaskPickerUI.SetLastMask(mCurrSelectionMask);
            }

            mCurrSelectionMask.Clear();

            if (TerrainGlobals.getTerrain().getQuadNodeRoot() != null)
            {
                List <BTerrainQuadNode> nodes = new List <BTerrainQuadNode>();
                TerrainGlobals.getTerrain().getQuadNodeRoot().getTileBoundsIntersection(nodes, mCurrSelectionMaskExtends.minX, mCurrSelectionMaskExtends.maxX,
                                                                                        mCurrSelectionMaskExtends.minZ, mCurrSelectionMaskExtends.maxZ);

                for (int i = 0; i < nodes.Count; i++)
                {
                    nodes[i].mDirty = true;
                }
                TerrainGlobals.getTerrain().rebuildDirtyPostDeform(BRenderDevice.getDevice());
            }

            // Reset extends
            mCurrSelectionMaskExtends.empty();
        }
示例#17
0
        void renderCell(RealLOSVisualData handle)
        {
            BRenderDevice.getDevice().VertexDeclaration = VertexTypes.Pos_Color.vertDecl;
            BRenderDevice.getDevice().VertexFormat      = VertexTypes.Pos_Color.FVF_Flags;

            BRenderDevice.getDevice().VertexShader = null;
            BRenderDevice.getDevice().PixelShader  = null;
            BRenderDevice.getDevice().SetTexture(0, null);

            BRenderDevice.getDevice().SetStreamSource(0, handle.mVB, 0);
            BRenderDevice.getDevice().Indices = handle.mIB;

            BRenderDevice.getDevice().RenderState.CullMode = Cull.None;

            BRenderDevice.getDevice().SetRenderState(RenderStates.ZBufferWriteEnable, false);
            BRenderDevice.getDevice().SetRenderState(RenderStates.FillMode, (int)FillMode.WireFrame);
            //BRenderDevice.getDevice().DrawPrimitives(PrimitiveType.TriangleList, 0, handle.mNumPrims);
            BRenderDevice.getDevice().DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, handle.mNumVerts, 0, handle.mNumPrims);
            BRenderDevice.getDevice().SetRenderState(RenderStates.FillMode, (int)FillMode.Solid);

            BRenderDevice.getDevice().SetRenderState(RenderStates.AlphaTestEnable, false);

            BRenderDevice.getDevice().SetRenderState(RenderStates.SourceBlend, (int)Blend.SourceAlpha);
            BRenderDevice.getDevice().SetRenderState(RenderStates.DestinationBlend, (int)Blend.InvSourceAlpha);
            BRenderDevice.getDevice().SetRenderState(RenderStates.AlphaBlendEnable, true);
            //BRenderDevice.getDevice().DrawPrimitives(PrimitiveType.TriangleList, 0, handle.mNumPrims);
            BRenderDevice.getDevice().DrawIndexedPrimitives(PrimitiveType.TriangleList, 0, 0, handle.mNumVerts, 0, handle.mNumPrims);
            BRenderDevice.getDevice().SetRenderState(RenderStates.AlphaBlendEnable, false);
            BRenderDevice.getDevice().SetRenderState(RenderStates.ZBufferWriteEnable, true);
            BRenderDevice.getDevice().RenderState.CullMode = Cull.CounterClockwise;
        }
示例#18
0
        public void renderSubWindow(int minXChunk, int minZChunk, int maxXChunk, int maxZChunk)
        {
            int numXNodes = (int)(TerrainGlobals.getTerrain().getNumXVerts() / BTerrainQuadNode.cMaxWidth);

            minXChunk = (int)(BMathLib.Clamp(minXChunk, 0, numXNodes - 1));
            minZChunk = (int)(BMathLib.Clamp(minZChunk, 0, numXNodes - 1));
            maxXChunk = (int)(BMathLib.Clamp(maxXChunk, 0, numXNodes - 1));
            maxZChunk = (int)(BMathLib.Clamp(maxZChunk, 0, numXNodes - 1));

            //set LOD Level
            mTerrainGPUShader.mShader.SetValue(mShaderChunkScaleHandle, TerrainGlobals.getTerrain().getTileScale());
            BRenderDevice.getDevice().SetStreamSource(0, mVB, 0);

            mTerrainGPUShader.mShader.BeginPass((int)mPassNum);

            BTerrainQuadNode[] mNodes = TerrainGlobals.getTerrain().getQuadNodeLeafArray();

            for (int i = minXChunk; i < maxXChunk; i++)
            {
                for (int j = minZChunk; j < maxZChunk; j++)
                {
                    int indx = i * numXNodes + j;
                    renderLeafNode(mNodes[indx]);
                }
            }

            mTerrainGPUShader.mShader.EndPass();
        }
示例#19
0
        void generateIrradiance(ref Matrix worldToCamera, ref Matrix worldToLight)
        {
            //CLM this provides accurate depth peeling results (in ISO view...)
            BRenderDevice.getDevice().Clear(ClearFlags.ZBuffer | ClearFlags.Target, (unchecked ((int)0x00000000)), 0, 0);


            /////////////////////////////////////////////////////////////////////////////
            //[ ] step5 GENERATE THE IRRADIANCE FOR THIS DEPTH LAYER
            // Read buffer D at the position of parallel projection of the visible point in buffer A
            //and store the result into Buffer E if this point is in front of (read: depth is less than)
            //the visible point along the selected global ray direction
            //CLM
            // Render fullscreen quad
            //   for each fragment, get the visible point (A) and project it into lightSpace
            //   get the depth (C) at the point that A lands.
            //   if A.depth > C.depth, E=D;
            mDepthPeelShader.mShader.SetValue(mShaderPrevDepthTexture, mDepthBufferC);
            mDepthPeelShader.mShader.SetValue(mShaderWorldPosFromCam, mPointBufferA);
            mDepthPeelShader.mShader.SetValue(mShaderWorldToCamMatrix, worldToCamera);
            mDepthPeelShader.mShader.SetValue(mShaderWorldToLightMatrix, worldToLight);
            mDepthPeelShader.mShader.SetValue(mShaderDepthLayerTexture, mCurrentDepthLayerD);

            mDepthPeelShader.mShader.BeginPass((int)eShaderPassIndex.eShaderPass5_ProjectLayerTest);
            mFullscreenQuad.render(true);
            mDepthPeelShader.mShader.EndPass();
            copyRT1toColorTexture(mIrradianceE);

            // copySurface(mTempTargetSurfCOLOR, mBackBuffer);//CLM copy to backBuffer for debugging...
        }
示例#20
0
        //CLM these just generate D3D Texture versions of the KNS  & Recolor data
        //we should be able to remove this class all together
        unsafe void recoloredExemplarToD3DTexture(Exemplar a, int l)
        {
            // recolored exemplar
            // . quantize !
            Quantizer q = new Quantizer(a.recoloredStack(l), Globals.QUANTIZE_NUM_BITS, Globals.QUANTIZE_PERCENT_INSIDE);

            m_d3dRecolored_0_3 = new Texture(BRenderDevice.getDevice(),
                                             a.recoloredStack(l).width(),
                                             a.recoloredStack(l).height(), 1, 0, Format.A8R8G8B8, Pool.Managed);


            // . fill
            GraphicsStream texstream = m_d3dRecolored_0_3.LockRectangle(0, LockFlags.None);
            byte *         data      = (byte *)texstream.InternalDataPointer;
            int            rectPitch = a.recoloredStack(l).width() * 4;

            for (int j = 0; j < a.recoloredStack(l).height(); j++)
            {
                for (int i = 0; i < a.recoloredStack(l).width(); i++)
                {
                    int v0 = q.quantized().get(i, j, 0);
                    int v1 = q.quantized().get(i, j, 1);
                    int v2 = q.quantized().get(i, j, 2);
                    int v3 = q.quantized().get(i, j, 3);
                    Globals.Assert(v0 >= 0 && v0 <= 255);
                    Globals.Assert(v1 >= 0 && v1 <= 255);
                    Globals.Assert(v2 >= 0 && v2 <= 255);
                    Globals.Assert(v3 >= 0 && v3 <= 255);
                    data[i * 4 + j * rectPitch + 2] = (byte)(v0);
                    data[i * 4 + j * rectPitch + 1] = (byte)(v1);
                    data[i * 4 + j * rectPitch + 0] = (byte)(v2);
                    data[i * 4 + j * rectPitch + 3] = (byte)(v3);
                }
            }
            m_d3dRecolored_0_3.UnlockRectangle(0);



            // de-quantization parameters

            m_UnqRecolored_Scale = new List <float>(Globals.NUM_RUNTIME_PCA_COMPONENTS);
            m_UnqRecolored_Mean  = new List <float>(Globals.NUM_RUNTIME_PCA_COMPONENTS);

            for (int c = 0; c < Globals.NUM_RUNTIME_PCA_COMPONENTS; c++)
            {
                m_UnqRecolored_Scale.Add(q.radius(c));
                m_UnqRecolored_Mean.Add(q.center(c));
            }


            // . unquantize, recolored exemplar
            qr_mean_0_3  = new Vector4(m_UnqRecolored_Mean[0], m_UnqRecolored_Mean[1], m_UnqRecolored_Mean[2], m_UnqRecolored_Mean[3]);
            qr_scale_0_3 = new Vector4(m_UnqRecolored_Scale[0], m_UnqRecolored_Scale[1], m_UnqRecolored_Scale[2], m_UnqRecolored_Scale[3]);

            Vector4 div3 = new Vector4(0.33333f, 0.3333f, 0.3333f, 0.3333f);
            Vector4 mul2 = new Vector4(2, 2, 2, 2);

            qr_mean_0_3  = qr_mean_0_3 - qr_scale_0_3;
            qr_scale_0_3 = Vector4.Multiply(Vector4.Multiply(qr_scale_0_3, 1 / 3.0f), 2);
        }
示例#21
0
        //-------------------------

        //-------------------------
        void initTextures()
        {
            Format fmt = Format.R32F;

            mTempTargetTexFLOAT   = new Texture(BRenderDevice.getDevice(), (int)mWidth, (int)mHeight, 1, Usage.RenderTarget, fmt, Pool.Default);
            mTempTargetSurfFLOAT  = mTempTargetTexFLOAT.GetSurfaceLevel(0);
            mTempResolveTexFLOAT  = new Texture(BRenderDevice.getDevice(), (int)mWidth, (int)mHeight, 1, 0, fmt, Pool.SystemMemory);
            mTempResolveSurfFLOAT = mTempResolveTexFLOAT.GetSurfaceLevel(0);

            mTempTargetTexCOLOR   = new Texture(BRenderDevice.getDevice(), (int)mWidth, (int)mHeight, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default);
            mTempTargetSurfCOLOR  = mTempTargetTexCOLOR.GetSurfaceLevel(0);
            mTempResolveTexCOLOR  = new Texture(BRenderDevice.getDevice(), (int)mWidth, (int)mHeight, 1, 0, Format.A8R8G8B8, Pool.SystemMemory);
            mTempResolveSurfCOLOR = mTempResolveTexCOLOR.GetSurfaceLevel(0);

            mPointBufferA     = new Texture(BRenderDevice.getDevice(), (int)mWidth, (int)mHeight, 1, Usage.RenderTarget, Format.A32B32G32R32F, Pool.Default);
            mPointBufferASurf = mPointBufferA.GetSurfaceLevel(0);


            mDepthBufferC     = new Texture(BRenderDevice.getDevice(), (int)mWidth, (int)mHeight, 1, 0, fmt, Pool.Managed);
            mDepthBufferCSurf = mDepthBufferC.GetSurfaceLevel(0);

            //this should be a color texture..
            mCurrentDepthLayerD     = new Texture(BRenderDevice.getDevice(), (int)mWidth, (int)mHeight, 1, 0, Format.A8R8G8B8, Pool.Managed);
            mCurrentDepthLayerDSurf = mCurrentDepthLayerD.GetSurfaceLevel(0);

            //this should be a color texture..
            mIrradianceE     = new Texture(BRenderDevice.getDevice(), (int)mWidth, (int)mHeight, 1, 0, Format.A8R8G8B8, Pool.Managed);
            mIrradianceESurf = mIrradianceE.GetSurfaceLevel(0);
        }
示例#22
0
        //-----------------------------------------------------------------------------
        public void camUpdate()
        {
            Matrix View;

            View = Matrix.LookAtLH(mEye, mLookAt, mUp);
            BRenderDevice.getDevice().SetTransform(TransformType.View, View);
        }
示例#23
0
        public void create(int width, int height, int numEntries, int rows, int columns, int numMips, Format fmt)
        {
            if (numMips == 0)
            {
                numMips = 1;
            }
            mWidth      = width;
            mHeight     = height;
            mNumMips    = numMips;
            mNumEntries = numEntries;
            mRows       = rows;
            mColumns    = columns;
            mFmt        = fmt;

            mTotalHeight = mRows * mHeight;
            mTotalWidth  = mColumns * mWidth;


            mAtlasScale = mWidth / (float)mTotalWidth;

            mTextures = new Texture[(int)BTerrainTexturing.eTextureChannels.cSplatChannelCount];
            for (int i = 0; i < (int)BTerrainTexturing.eTextureChannels.cSplatChannelCount; i++)
            {
                //mTextures[i] = new Texture(BRenderDevice.getDevice(), mTotalWidth, mTotalHeight, numMips, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default);
                // mTextures[i] = new Texture(BRenderDevice.getDevice(), mTotalWidth, mTotalHeight, numMips, Usage.RenderTarget, Format.R5G6B5, Pool.Default);
                mTextures[i] = new Texture(BRenderDevice.getDevice(), mTotalWidth, mTotalHeight, numMips, Usage.RenderTarget, fmt, Pool.Default);
            }
        }
示例#24
0
        void displayFoliageSet(string foliageSetName)
        {
            string fullFileName = CoreGlobals.getWorkPaths().mFoliagePath + "\\" + foliageSetName;

            FoliageSet fs       = null;
            int        setIndex = FoliageManager.newSet(fullFileName);

            fs = FoliageManager.giveSet(setIndex);

            //load our image for display
            if (!File.Exists(fullFileName + "_df.ddx"))
            {
                MessageBox.Show(fullFileName + "_df.ddx Not found for this foliage set. Please ensure it exists.");
                return;
            }

            Texture tex = TextureLoader.FromFile(BRenderDevice.getDevice(), fullFileName + "_df.tga");
            Image   img = Image.FromStream(TextureLoader.SaveToStream(ImageFileFormat.Bmp, tex));

            tex.Dispose();
            tex = null;

            Bitmap mainImage = new Bitmap(img);

            //now, split us into X sub images to display.
            int          numsections = fs.mNumBlades;
            List <Image> images      = splitImg(mainImage, numsections, fs);// splitImgHorizontally(mainImage, numsections);

            for (int i = 0; i < numsections; i++)
            {
                flowLayoutPanel1.Controls.Add(new FoliageBladeButton(images[i].Width, images[i].Height, images[i], fullFileName, i, this));
            }
        }
示例#25
0
        unsafe public void computeD3DPixPackTextures(Synthesiser m_Synthesizer)
        {
            int sz = 0;

            for (int l = 0; l < Globals.cNumLevels /*m_Synthesizer.getAnalyser().nbLevels()*/; l++)
            {
                int csz = Synthesiser.bufferSizeFromWindow(bufferrgn(l));
                sz = Math.Max(csz, sz);
            }

            mD3DPixPackOffsets = new Texture[m_iNbLevels, Globals.cNumCorrectionPasses, 4];

            for (int l = 0; l < m_iNbLevels; l++)
            {
                Window window = bufferrgn(l);
                for (int pass = 0; pass < Globals.cNumCorrectionPasses; pass++)
                {
                    for (int sub = 0; sub < 4; sub++)
                    {
                        // . which quadrant to update ?
                        int ai = (m_Synthesizer.m_SubpassesOrderingTbl[pass % Globals.SYNTH_ORDER_NUM_PASSES][sub][0] + window.left()) & 1;
                        int aj = (m_Synthesizer.m_SubpassesOrderingTbl[pass % Globals.SYNTH_ORDER_NUM_PASSES][sub][1] + window.top()) & 1;
                        Globals.Assert(ai >= 0 && aj >= 0);


                        Vector4 qszs = m_Synthesizer.bufferSize(sz);

                        mD3DPixPackOffsets[l, pass, sub] = new Texture(BRenderDevice.getDevice(), 5, 5, 1, 0, Format.G16R16F, Pool.Managed);
                        GraphicsStream texstream = mD3DPixPackOffsets[l, pass, sub].LockRectangle(0, LockFlags.None);
                        ushort *       data      = (ushort *)texstream.InternalDataPointer;
                        int            rectPitch = 5 * 2;

                        for (int x = 0; x < 5; x++)
                        {
                            for (int y = 0; y < 5; y++)
                            {
                                int     ox = x - 2;
                                int     oy = y - 2;
                                int     fx = (int)Math.Floor((ox + ai) / 2.0f);
                                int     fy = (int)Math.Floor((oy + aj) / 2.0f);
                                Vector4 vq = new Vector4(
                                    ((float)(fx + (sz >> 1) * ox) + ai * (sz >> 1)) / qszs.X,
                                    ((float)(fy + (sz >> 1) * oy) + aj * (sz >> 1)) / qszs.Y,
                                    0, 0);
                                //offs[x + y * 5] = vq;

                                int     srcIndex = x * 2 * sizeof(byte) + y * rectPitch;
                                float16 xx       = new float16(vq.X);
                                float16 yy       = new float16(vq.Y);
                                data[srcIndex]     = xx.getInternalDat();
                                data[srcIndex + 1] = yy.getInternalDat();
                            }
                        }

                        mD3DPixPackOffsets[l, pass, sub].UnlockRectangle(0);
                    }
                }
            }
        }
示例#26
0
            bool Load(string texFilename)
            {
                string ext          = Path.GetExtension(texFilename);
                string fullFileName = texFilename;
                Bitmap bitmap       = null;

                if (ext != @".bmp")//for masks
                {
                    fullFileName = CoreGlobals.getWorkPaths().getWorkingTexName(texFilename);

                    if (File.Exists(fullFileName))
                    {
                        Texture tex = TextureLoader.FromFile(BRenderDevice.getDevice(), fullFileName);
                        Image   img = Image.FromStream(TextureLoader.SaveToStream(ImageFileFormat.Bmp, tex));
                        bitmap = new Bitmap(img);

                        if (mPalette.mbRestrictTextureSize && (bitmap.Height != 512 || bitmap.Width != 512 ||
                                                               (bitmap.PixelFormat != System.Drawing.Imaging.PixelFormat.Format32bppArgb)))
                        {
                            MessageBox.Show(String.Format("Texture Format must be Format32bppRgb or Format24bppRgb RGB\n {0} is {1} by {2} by {3}", fullFileName, bitmap.Height, bitmap.Width, bitmap.PixelFormat.ToString()));
                            return(false);
                        }
                        else if (bitmap.Height != 512 || bitmap.Width != 512)
                        {
                            this.DisplayStyle = ToolStripItemDisplayStyle.Image;
                            DropDown.Items.Clear();
                            return(false);
                        }
                    }
                    else
                    {
                        Texture tex = TextureLoader.FromFile(BRenderDevice.getDevice(), EditorCore.CoreGlobals.getWorkPaths().mBlankTextureName);
                        Image   img = Image.FromStream(TextureLoader.SaveToStream(ImageFileFormat.Bmp, tex));
                        bitmap = new Bitmap(img);
                    }
                }
                else //OUR BMP MASKS
                {
                    if (File.Exists(fullFileName))
                    {
                        bitmap = new Bitmap(fullFileName);
                    }
                    else
                    {
                        Texture tex = TextureLoader.FromFile(BRenderDevice.getDevice(), EditorCore.CoreGlobals.getWorkPaths().mBlankTextureName);
                        Image   img = Image.FromStream(TextureLoader.SaveToStream(ImageFileFormat.Bmp, tex));
                        bitmap = new Bitmap(img);
                    }
                }

                Image myThumbnail = bitmap.GetThumbnailImage(mPalette.mButtonSize, mPalette.mButtonSize, mPalette.myCallback, IntPtr.Zero);

                ImageScaling = ToolStripItemImageScaling.None;
                Image        = myThumbnail;
                ToolTipText  = texFilename;


                return(true);
            }
示例#27
0
        unsafe void copyRT0toDepthTexture(Texture destTex)
        {
            BRenderDevice.getDevice().GetRenderTargetData(mTempTargetSurfFLOAT, mTempResolveSurfFLOAT);



            copyTexturesFLOAT(mTempResolveTexFLOAT, destTex);
        }
示例#28
0
 void render()
 {
     BRenderDevice.clear(true, true, unchecked ((int)0x00777777), 1.0f, 0);
     BRenderDevice.beginScene();
     scene.render();
     BRenderDevice.endScene();
     BRenderDevice.present();
 }
示例#29
0
 public void reCreate()
 {
     mTextures = new Texture[(int)BTerrainTexturing.eTextureChannels.cSplatChannelCount];
     for (int i = 0; i < (int)BTerrainTexturing.eTextureChannels.cSplatChannelCount; i++)
     {
         mTextures[i] = new Texture(BRenderDevice.getDevice(), mTotalWidth, mTotalHeight, mNumMips, Usage.RenderTarget, mFmt, Pool.Default);
     }
 }
示例#30
0
 //-----------------------
 void copyTempD3DValues()
 {
     mViewport         = BRenderDevice.getDevice().Viewport;
     mWorldMatrix      = BRenderDevice.getDevice().Transform.World;
     mViewMatrix       = BRenderDevice.getDevice().Transform.View;
     mProjectionMatrix = BRenderDevice.getDevice().Transform.Projection;
     mBackBuffer       = BRenderDevice.getDevice().GetRenderTarget(0);
     mDepthStencil     = BRenderDevice.getDevice().DepthStencilSurface;
 }