Example #1
0
        //TODO:GraphicsContextにAppScreenを保持できればよいが。
        public SpriteBuffer2(GraphicsContext graphics,int maxNumOfSprite, Vector2 screenScale, ImageRect rectAppScreen)
        {
            this.m_graphics = graphics;
            this.screenScale=screenScale;
            this.rectAppScreen=rectAppScreen;

            if(shaderProgram == null)
            {
                shaderProgram=CreateSpriteBShader();
            }

            m_maxNumOfSprite=maxNumOfSprite;

            #if true
            bufferVerties = 	new float[m_maxNumOfSprite * FNUM_VERTEX_PER_SPRITE];	//0
            bufferTexcoords = 	new float[m_maxNumOfSprite * FNUM_TEXCOORD_PER_SPRITE];	//1
            bufferColors = 		new float[m_maxNumOfSprite * FNUM_COLOR_PER_SPRITE];	//2

            bufferWH = 			new float[m_maxNumOfSprite * FNUM_WH_PER_SPRITE];		//3
            bufferCenter = 		new float[m_maxNumOfSprite * FNUM_CENTER_PER_SPRITE];	//4
            bufferRot = 		new float[m_maxNumOfSprite * FNUM_ROT_PER_SPRITE];		//5
            bufferSpritePosition=new float[m_maxNumOfSprite * FNUM_SPOSITION_PER_SPRITE];//6

            bufferIndices = new ushort[m_maxNumOfSprite * INDEX_SIZE_PER_SPRITE];

            //
            vertexBuffer = new VertexBuffer(
                m_maxNumOfSprite * VERTEX_NUM_PER_SPRITE,
                m_maxNumOfSprite * INDEX_SIZE_PER_SPRITE,
                VertexFormat.Float3,//0
                VertexFormat.Float2,//1
                VertexFormat.Float4,//2
                VertexFormat.Float2,//3
                VertexFormat.Float2,//4
                VertexFormat.Float2,//5
                VertexFormat.Float3//6
                );
            #else
            //正しい。
            bufferVerties = new float[m_maxNumOfSprite * VERTEX_SIZE_PER_SPRITE * 3];	//0
            bufferTexcoords = new float[m_maxNumOfSprite * VERTEX_SIZE_PER_SPRITE * 2];	//1
            bufferColors = new float[m_maxNumOfSprite * VERTEX_SIZE_PER_SPRITE * 4];	//2
            bufferIndices = new ushort[m_maxNumOfSprite * INDEX_SIZE_PER_SPRITE];

            //
            vertexBuffer = new VertexBuffer(
                m_maxNumOfSprite * VERTEX_SIZE_PER_SPRITE,
                m_maxNumOfSprite * INDEX_SIZE_PER_SPRITE,
                VertexFormat.Float3,
                VertexFormat.Float2,
                VertexFormat.Float4);
            #endif
        }
Example #2
0
        public override void Initialize()
        {
            base.Initialize();

            rectScreen = graphics.Screen.Rectangle;

            Texture2D texturePlayer = new Texture2D("/Application/resources/Player.png", false);

            spritePlayer = new SimpleSprite(graphics, texturePlayer);
            spritePlayer.Position.X = rectScreen.Width/2.0f;
            spritePlayer.Position.Y = rectScreen.Height/2.0f;
            spritePlayer.Position.Z = 0.0f;
        }
Example #3
0
        public void TryCacheSpriteSheetImage(string id, string uri, ImageRect rect, Action <EnhancedImageInfo> Finally = null, int forcedHeight = -1)
        {
            if (_cachedImageInfo.TryGetValue(id, out var info))
            {
                Finally?.Invoke(info);
                return;
            }

            if (_cachedSpriteSheets.TryGetValue(uri, out var tex))
            {
                CacheSpriteSheetImage(id, rect, tex, Finally, forcedHeight);
            }
            else
            {
                StartCoroutine(ChatImageProvider.instance.DownloadContent(uri, (bytes) =>
                {
                    Logger.log.Info($"Finished download content for emote {id}!");
                    var tex = GraphicUtils.LoadTextureRaw(bytes);
                    _cachedSpriteSheets[uri] = tex;

                    CacheSpriteSheetImage(id, rect, tex, Finally, forcedHeight);
                }));
            }
        }
Example #4
0
        /// <summary>
        /// Try to cache sprite sheet
        /// </summary>
        /// <param name="p_ID">ID of the sprite sheet</param>
        /// <param name="p_URI">The resource location</param>
        /// <param name="p_Rect">Sheet rect</param>
        /// <param name="p_Finally">A callback that occurs after the resource is retrieved. This will always occur even if the resource is already cached.</param>
        /// <param name="p_ForcedHeight">Forced height</param>
        /// <returns></returns>
        public void TryCacheSpriteSheetImage(string p_ID, string p_URI, ImageRect p_Rect, Action <EnhancedImageInfo> p_Finally = null, int p_ForcedHeight = -1)
        {
            if (m_CachedImageInfo.TryGetValue(p_ID, out var info))
            {
                p_Finally?.Invoke(info);
                return;
            }

            if (m_CachedSpriteSheets.TryGetValue(p_URI, out var l_Texture))
            {
                CacheSpriteSheetImage(p_ID, l_Texture, p_Rect, p_Finally, p_ForcedHeight);
            }
            else
            {
                StartCoroutine(ChatImageProvider.instance.DownloadContent(p_URI, (p_Bytes) =>
                {
                    //Logger.Instance.Info($"Finished download content for emote {p_ID}!");
                    l_Texture = BeatSaberPlus.Utils.UnityTexture.LoadTextureRaw(p_Bytes);
                    m_CachedSpriteSheets[p_URI] = l_Texture;

                    CacheSpriteSheetImage(p_ID, l_Texture, p_Rect, p_Finally, p_ForcedHeight);
                }));
            }
        }
Example #5
0
        public Map(string filePath)
        {
            this.filePath = filePath;
            random        = new Random();

            tileLocations = new Dictionary <MapTile.Types, Vector2i>();

            setupLocations();

            tiles     = new List <MapTile> ();
            wallTiles = new List <MapTile> ();


            ParseFile(this, filePath, tiles);

            tiles.Reverse();

            prepareDescriptions(this, tiles);

            spriteList = prepareTiles(this, tiles);


            Console.WriteLine("map: " + filePath);
            Console.WriteLine("width: " + width);
            Console.WriteLine("heigh: " + height);

            //prepare thumbnail

            //create new scene for the thumbnail
            ThumbnailScene ts = new ThumbnailScene();

            //set up the camera so the entire level is visible
            ts.Camera2D.SetViewFromWidthAndCenter(FMath.Max(width, height), new Vector2(width / 2.0f, height / 2.0f));



            //create a new framebuffer for the thumbnail
            FrameBuffer thumbnailBuffer = new FrameBuffer();
            //create an associated texture
            Texture2D tex2d = new Texture2D(256, 256, false, PixelFormat.Rgba, PixelBufferOption.Renderable);

            thumbnailBuffer.SetColorTarget(tex2d, 0);

            //sprite to contain the thumbnail
            thumbnailSprite = new SpriteUV(new TextureInfo(tex2d));


            //render the thumbnail:
            if (Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.CurrentScene == null)
            {
                Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.RunWithScene(ts, true);
            }
            else
            {
                Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.ReplaceScene(ts);
            }
            Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.Update();

            //save the current framebuffer and viewport
            FrameBuffer oldBuffer      = Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.GetFrameBuffer();
            ImageRect   oldViewport    = Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.GetViewport();
            Vector4     oldClearColour = Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.GetClearColor();

            //set the new framebuffer for the thumbnail
            Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.SetFrameBuffer(thumbnailBuffer);
            //set the correct viewport
            Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.SetViewport(0, 0, 256, 256);

            Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.SetClearColor(new Vector4(0.0f, 0.0f, 0.0f, 1.0f));
            Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.Clear();

            //add the spritelists to the scene
            foreach (SpriteList sl in spriteList)
            {
                ts.Background.AddChild(sl);
            }

            //render the thumbnail scene
            Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.CurrentScene.render();

            //switch back to old framebuffer and viewport:
            Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.SetFrameBuffer(oldBuffer);
            Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.SetViewport(oldViewport);
            Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.SetClearColor(oldClearColour);


            //get rid of the scene
            //remove all children,but WITHOUT THE CLEANUP(otherwise they won't work in the main Game scene)
            ts.Background.RemoveAllChildren(false);
            ts = null;

            //Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.GL.Context.SwapBuffers ();
            //Sce.PlayStation.HighLevel.GameEngine2D.Director.Instance.PostSwap ();

            //make the thumbnail larger
            //thumbnailSprite.Position = new Vector2(100.0f,100.0f);
            thumbnailSprite.FlipV = true;
            thumbnailSprite.CenterSprite(new Vector2(0.5f, 0.5f));
            thumbnailSprite.Scale = new Vector2(400.0f, 400.0f);
        }
Example #6
0
		public void GetData<T>(int level, Rectangle? rect, T[] data, int startIndex, int elementCount) where T : struct
        {
            if (data == null || data.Length == 0)
                throw new ArgumentException("data cannot be null");
            if (data.Length < startIndex + elementCount)
                throw new ArgumentException("The data passed has a length of " + data.Length + " but " + elementCount + " pixels have been requested.");

#if IOS

            // Reading back a texture from GPU memory is unsupported
            // in OpenGL ES 2.0 and no work around has been implemented.           
            throw new NotSupportedException("OpenGL ES 2.0 does not support texture reads.");

#elif ANDROID

            Rectangle r;
            if (rect != null)
            {
                r = rect.Value;
            }
            else
            {
                r = new Rectangle(0, 0, Width, Height);
            }
            			
			// Get the Color values
			if (typeof(T) == typeof(uint))
			{
				Color[] colors = new Color[elementCount];
				GetData<Color>(level, rect, colors, startIndex, elementCount);
				uint[] final = data as uint[];
				for (int i = 0; i < final.Length; i++)
				{
					final[i] = (uint)
					(
						// use correct xna byte order (and remember to convert it yourself as needed)
						colors[i].A << 24 |
						colors[i].B << 16 |
						colors[i].G << 8 |
						colors[i].R
					);
				}
			}
            // Get the Color values
            else if ((typeof(T) == typeof(Color)))
            {
				byte[] imageInfo = GetTextureData(0);

                int rWidth = r.Width;
                int rHeight = r.Height;
                
                // Loop through and extract the data but we need to load it 
                var dataRowColOffset = 0;
                var sz = 0;
                var pixelOffset = 0;
                for (int y = r.Top; y < rHeight; y++)
                {
                    for (int x = r.Left; x < rWidth; x++)
                    {
                        var result = new Color(0, 0, 0, 0);
                        dataRowColOffset = ((y * r.Width) + x);
                        switch (Format)
                        {
                            case SurfaceFormat.Color: //kTexture2DPixelFormat_RGBA8888
                            case SurfaceFormat.Dxt3:
                                sz = 4;
                                pixelOffset = dataRowColOffset * sz;
                                result.R = imageInfo[pixelOffset];
                                result.G = imageInfo[pixelOffset + 1];
                                result.B = imageInfo[pixelOffset + 2];
                                result.A = imageInfo[pixelOffset + 3];
                                break;
                            case SurfaceFormat.Bgra4444: //kTexture2DPixelFormat_RGBA4444
                                //								sz = 2;
                                //								pos = ((y * imageSize.Width) + x) * sz;
                                //								pixelOffset = new IntPtr (imageData.ToInt64 () + pos);
                                //	
                                //								Marshal.Copy (pixelOffset, pixel, 0, 4);	
                                //	
                                //								result.R = pixel [0];
                                //								result.G = pixel [1];
                                //								result.B = pixel [2];
                                //								result.A = pixel [3];
                                sz = 2;
                                pixelOffset = dataRowColOffset * sz;
                                result.R = imageInfo[pixelOffset];
                                result.G = imageInfo[pixelOffset + 1];
                                result.B = imageInfo[pixelOffset + 2];
                                result.A = imageInfo[pixelOffset + 3];
                                break;
                            case SurfaceFormat.Bgra5551: //kTexture2DPixelFormat_RGB5A1
                                //								sz = 2;
                                //								pos = ((y * imageSize.Width) + x) * sz;
                                //								pixelOffset = new IntPtr (imageData.ToInt64 () + pos);
                                //								Marshal.Copy (pixelOffset, pixel, 0, 4);	
                                //	
                                //								result.R = pixel [0];
                                //								result.G = pixel [1];
                                //								result.B = pixel [2];
                                //								result.A = pixel [3];
                                sz = 2;
                                pixelOffset = dataRowColOffset * sz;
                                result.R = imageInfo[pixelOffset];
                                result.G = imageInfo[pixelOffset + 1];
                                result.B = imageInfo[pixelOffset + 2];
                                result.A = imageInfo[pixelOffset + 3];
                                break;
                            case SurfaceFormat.Alpha8:  // kTexture2DPixelFormat_A8 
                                //								sz = 1;
                                //								pos = ((y * imageSize.Width) + x) * sz;
                                //								pixelOffset = new IntPtr (imageData.ToInt64 () + pos);								
                                //								Marshal.Copy (pixelOffset, pixel, 0, 4);	
                                //	
                                //								result.A = pixel [0];
                                sz = 1;
                                pixelOffset = dataRowColOffset * sz;
                                result.A = imageInfo[pixelOffset];
                                break;
                            default:
                                throw new NotSupportedException("Texture format");
                        }
                        data[dataRowColOffset] = (T)(object)result;
                    }                    
                }
            }
            else
            {
                throw new NotImplementedException("GetData not implemented for type.");
            }
#elif PSM
            Rectangle r;
            if (rect.HasValue)
            {
                r = rect.Value;
            }
            else
            {
                r = new Rectangle(0, 0, Width, Height);
            }
            
            int rWidth = r.Width;
            int rHeight = r.Height;
            
            var sz = 4;         
            
            // Loop through and extract the data but we need to load it 
            var dataRowColOffset = 0;
            
            var pixelOffset = 0;
            var result = new Color(0, 0, 0, 0);
            
            byte[] imageInfo = new byte[(rWidth * rHeight) * sz];
            
            ImageRect old_scissor = GraphicsDevice.Context.GetScissor();
            ImageRect old_viewport = GraphicsDevice.Context.GetViewport();
            FrameBuffer old_frame_buffer = GraphicsDevice.Context.GetFrameBuffer();

            ColorBuffer color_buffer = new ColorBuffer(rWidth, rHeight, PixelFormat.Rgba);
            FrameBuffer frame_buffer = new FrameBuffer();
            frame_buffer.SetColorTarget(color_buffer);
             
            GraphicsDevice.Context.SetFrameBuffer(frame_buffer);

            GraphicsDevice.Context.SetTexture(0, this._texture2D);
            GraphicsDevice.Context.ReadPixels(imageInfo, PixelFormat.Rgba, 0, 0, rWidth, rHeight);

            GraphicsDevice.Context.SetFrameBuffer(old_frame_buffer);
            GraphicsDevice.Context.SetScissor(old_scissor);
            GraphicsDevice.Context.SetViewport(old_viewport);
            
            for (int y = r.Top; y < rHeight; y++)
            {
                for (int x = r.Left; x < rWidth; x++)
                {
                    dataRowColOffset = ((y * r.Width) + x);
                    
                    pixelOffset = dataRowColOffset * sz;
                    result.R = imageInfo[pixelOffset];
                    result.G = imageInfo[pixelOffset + 1];
                    result.B = imageInfo[pixelOffset + 2];
                    result.A = imageInfo[pixelOffset + 3];
                    
                    data[dataRowColOffset] = (T)(object)result;
                }
            }

#elif DIRECTX

            // Create a temp staging resource for copying the data.
            // 
            // TODO: We should probably be pooling these staging resources
            // and not creating a new one each time.
            //
            var desc = new SharpDX.Direct3D11.Texture2DDescription();
            desc.Width = width;
            desc.Height = height;
            desc.MipLevels = 1;
            desc.ArraySize = 1;
            desc.Format = SharpDXHelper.ToFormat(_format);
            desc.BindFlags = SharpDX.Direct3D11.BindFlags.None;
            desc.CpuAccessFlags = SharpDX.Direct3D11.CpuAccessFlags.Read;
            desc.SampleDescription.Count = 1;
            desc.SampleDescription.Quality = 0;
            desc.Usage = SharpDX.Direct3D11.ResourceUsage.Staging;
            desc.OptionFlags = SharpDX.Direct3D11.ResourceOptionFlags.None;

		    var d3dContext = GraphicsDevice._d3dContext;
            using (var stagingTex = new SharpDX.Direct3D11.Texture2D(GraphicsDevice._d3dDevice, desc))
                lock (d3dContext)
                {
                    // Copy the data from the GPU to the staging texture.
                    int elementsInRow;
                    int rows;
                    if (rect.HasValue)
                    {
                        elementsInRow = rect.Value.Width;
                        rows = rect.Value.Height;
                        d3dContext.CopySubresourceRegion(GetTexture(), level, new SharpDX.Direct3D11.ResourceRegion(rect.Value.Left, rect.Value.Top, 0, rect.Value.Right, rect.Value.Bottom, 1), stagingTex, 0, 0, 0, 0);
                    }
                    else
                    {
                        elementsInRow = width;
                        rows = height;
                        d3dContext.CopySubresourceRegion(GetTexture(), level, null, stagingTex, 0, 0, 0, 0);
                    }

                    // Copy the data to the array.
                    SharpDX.DataStream stream;
                    var databox = d3dContext.MapSubresource(stagingTex, 0, SharpDX.Direct3D11.MapMode.Read, SharpDX.Direct3D11.MapFlags.None, out stream);

                    // Some drivers may add pitch to rows.
                    // We need to copy each row separatly and skip trailing zeros.
                    var currentIndex = startIndex;
                    var elementSize = SharpDX.Utilities.SizeOf<T>();
                    for (var row = 0; row < rows; row++)
                    {
                        stream.ReadRange(data, currentIndex, elementsInRow);
                        stream.Seek(databox.RowPitch - (elementSize * elementsInRow), SeekOrigin.Current);
                        currentIndex += elementsInRow;
                    }
                    stream.Dispose();
                }

#else

			GL.BindTexture(TextureTarget.Texture2D, this.glTexture);

			if (glFormat == (GLPixelFormat)All.CompressedTextureFormats) {
				throw new NotImplementedException();
			} else {
				if (rect.HasValue) {
					var temp = new T[this.width*this.height];
					GL.GetTexImage(TextureTarget.Texture2D, level, this.glFormat, this.glType, temp);
					int z = 0, w = 0;

					for(int y= rect.Value.Y; y < rect.Value.Y+ rect.Value.Height; y++) {
						for(int x=rect.Value.X; x < rect.Value.X + rect.Value.Width; x++) {
							data[z*rect.Value.Width+w] = temp[(y*width)+x];
							w++;
						}
						z++;
					}
				} else {
					GL.GetTexImage(TextureTarget.Texture2D, level, this.glFormat, this.glType, data);
				}
			}

#endif
        }
Example #7
0
        /// <summary>
        /// mObjBtnRightAdd_Click(), mObjBtnLeftAdd_Click()
        /// 右または左へのフレーム追加
        /// </summary>
        /// <param name="nLR"></param>
        private bool LR_FrameAdd(int nLR)
        {
            mObjBtnRightAdd.Enabled = false;
            objLBRightAdd.Enabled   = false;
            mObjBtnLeftAdd.Enabled  = false;
            objLBLeftAdd.Enabled    = false;

            mObjUDFrameNo.Enabled = true;
            mObjHSFrame.Enabled   = true;
            //
            objLBWait.Enabled  = true;
            mObjUDWait.Enabled = true;
            // 選択解除
            if (mObjLVImageRectInfo.SelectedItems.Count > 0)
            {
                mObjLVImageRectInfo.SelectedItems[0].Selected = false;
            }
            //mObjLVImageRectInfo.SelectedItems.Clear();



            // アニメーション
            AnimationRectFrame tlARF = new AnimationRectFrame();

            tlARF.wait        = 1;
            tlARF.imageFileNo = (short)m_imageFileNo;
            tlARF.imageRectNo = (short)m_imageRectNo;
            if (nLR == 1)
            {   // 左
                m_rAR.aARF.Insert(mObjHSFrame.Value, tlARF);
            }
            else
            {
                // 右
                int n = mObjHSFrame.Value + 1;
                if (m_rAR.FrameCount == n || m_rAR.FrameCount == 0)
                {
                    m_rAR.aARF.Add(tlARF);
                }
                else
                {
                    m_rAR.aARF.Insert(n, tlARF);
                }
            }
            int i = m_rAR.FrameCount;

            // 削除ボタンの有効
            if (i > 1)
            {
                mObjBtnDelete.Enabled = true;
                objLBDelete.Enabled   = true;
            }
            // 最大値の変更
            mObjUDFrameNo.Maximum = i - 1;
            mObjHSFrame.Maximum   = i - 1;
            // フレーム数の表示再設定
            mObjLFramePos.Text = "" + i;
            if (nLR == 0 && i > 1)
            {
                // 右
                //mObjUDFrameNo.Value += 1;
                mObjHSFrame.Value += 1;
            }

            mObjUDWait.Value = m_rAR.aARF[mObjHSFrame.Value].wait;
            // リストビューに反映
            mObjLVRECT.Items[m_SelectAnimaRectNo].SubItems[1].Text = m_rAR.FrameCount + "";
            //
            m_rIF = m_com.D2Stage.FindRectFromIndex(tlARF.imageFileNo);
            //mObjXNAScreen.SetImgRect(m_rIF, tlARF.imageRectNo);
            mObjLBFileNameOut.Text = m_com.D2Stage.RectFilePathFromIndex(tlARF.imageFileNo);
            mObjLBRectNoOut.Text   = tlARF.imageRectNo + "";
            return(true);
        }
Example #8
0
 /// <summary>Sets the rectangle for the scissor test</summary>
 /// <param name="rectangle">Rectangle for the scissor test</param>
 public void SetScissor(ImageRect rectangle)
 {
     this.state.Scissor            = rectangle;
     GraphicsContext.notifyUpdate |= GraphicsUpdate.Scissor;
 }
Example #9
0
        public static void init(GraphicsContext graphicContext)
        {
            graphics      = graphicContext;
            shaderProgram = new ShaderProgram("/Application/shaders/Texture.cgx");
            shaderProgram.SetUniformBinding(0, "WorldViewProj");
            shaderProgram.SetAttributeBinding(0, "a_Position");
            shaderProgram.SetAttributeBinding(1, "a_TexCoord");

            textTexture = new Texture2D("/Application/test2.png", false);

            ImageRect rectScreen = graphics.Screen.Rectangle;

            Width  = rectScreen.Width;
            Height = rectScreen.Height;

            // build index list
            indices    = new ushort[indexSize];
            indices[0] = 0;
            indices[1] = 1;
            indices[2] = 2;
            indices[3] = 3;

            // build buffers
            vertexBuffer0 = new VertexBuffer(4, indexSize, VertexFormat.Float3, VertexFormat.Float2);
            vertexBuffer1 = new VertexBuffer(4, indexSize, VertexFormat.Float3, VertexFormat.Float2);
            vertexBuffer2 = new VertexBuffer(4, indexSize, VertexFormat.Float3, VertexFormat.Float2);

            // build verts for the full quad
            float[] vertices = new float[12];
            vertices[0] = 0.0f;                 // x0
            vertices[1] = 0.0f;                 // y0
            vertices[2] = 0.0f;                 // z0

            vertices[3] = 0.0f;                 // x1
            vertices[4] = 1.0f;                 // y1
            vertices[5] = 0.0f;                 // z1

            vertices[6] = 1.0f;                 // x2
            vertices[7] = 0.0f;                 // y2
            vertices[8] = 0.0f;                 // z2

            vertices[9]  = 1.0f;                // x3
            vertices[10] = 1.0f;                // y3
            vertices[11] = 0.0f;                // z3

            // build buffer0
            vertexBuffer0.SetVertices(0, vertices);
            vertexBuffer0.SetVertices(1, texcoords);
            vertexBuffer0.SetIndices(indices);

            // build verts for the left quad
            vertices[0] = 0.0f;                 // x0
            vertices[1] = 0.0f;                 // y0
            vertices[2] = 0.0f;                 // z0

            vertices[3] = 0.0f;                 // x1
            vertices[4] = 1.0f;                 // y1
            vertices[5] = 0.0f;                 // z1

            vertices[6] = 0.5f;                 // x2
            vertices[7] = 0.0f;                 // y2
            vertices[8] = 0.0f;                 // z2

            vertices[9]  = 0.5f;                // x3
            vertices[10] = 1.0f;                // y3
            vertices[11] = 0.0f;                // z3

            // build buffer1
            vertexBuffer1.SetVertices(0, vertices);
            vertexBuffer1.SetVertices(1, texcoords);
            vertexBuffer1.SetIndices(indices);


            // build verts for the right quad
            vertices[0] = 0.5f;                 // x0
            vertices[1] = 0.0f;                 // y0
            vertices[2] = 0.0f;                 // z0

            vertices[3] = 0.5f;                 // x1
            vertices[4] = 1.0f;                 // y1
            vertices[5] = 0.0f;                 // z1

            vertices[6] = 1.0f;                 // x2
            vertices[7] = 0.0f;                 // y2
            vertices[8] = 0.0f;                 // z2

            vertices[9]  = 1.0f;                // x3
            vertices[10] = 1.0f;                // y3
            vertices[11] = 0.0f;                // z3

            // build buffer2
            vertexBuffer2.SetVertices(0, vertices);
            vertexBuffer2.SetVertices(1, texcoords);
            vertexBuffer2.SetIndices(indices);

            unitScreenMatrix = new Matrix4
                                   (Width * 2.0f / rectScreen.Width, 0.0f, 0.0f, 0.0f,
                                   0.0f, Height * (-2.0f) / rectScreen.Height, 0.0f, 0.0f,
                                   0.0f, 0.0f, 1.0f, 0.0f,
                                   -1.0f, 1.0f, 0.0f, 1.0f
                                   );
        }
Example #10
0
 public void SetLocation(ImageRect location)
 {
     _location = location;
 }
Example #11
0
        public static void NextFrame()
        {
            frameCount++;
            uint runLength = 0x00;

            byte[] uBytes = new byte[4];

            int x = 0;
            int y = 0;

            totalBlack = 0;
            totalWhite = 0;
            while (true)
            {
                decodeStream.Read(uBytes, 0x00, 3);
                runLength = BitConverter.ToUInt32(uBytes, 0);

                if (runLength == 0xFFFFFF)
                {
                    lastColor = true;
                    break;
                }
                if (runLength == 0xFEFEFE)
                {
                    lastColor = false;
                    break;
                }
                if (lastColor)
                {
                    totalBlack += runLength;
                }
                else
                {
                    totalWhite += runLength;
                }

                uint totalLength = 0;
                while (totalLength < runLength)
                {
                    int thisRow = 0;
                    int ax      = x;
                    int ay      = y;
                    if ((x + runLength) - totalLength < 480)
                    {
                        thisRow = (int)(runLength - totalLength);
                        ax     += thisRow;
                    }
                    else
                    {
                        thisRow = 480 - x;
                        ay     += 1;
                        ax      = 0;
                    }

                    ImageRect loc = new ImageRect((int)x, (int)y, (int)thisRow, 1);
                    FrameImg.DrawRectangle(lastColor ? black : white, loc);
                    x            = ax;
                    y            = ay;
                    totalLength += (uint)thisRow;
                }

                lastColor = !lastColor;
            }
            tex = createTexture(FrameImg);
            spr = new SampleSprite(tex, ((960 / 2) - 480 / 2), ((544 / 2) - 360 / 2));
        }
Example #12
0
        public void SetViewport(ImageRect rectangle)
        {
//			Debug.Assert(false);
            this.SetViewport(rectangle.X, rectangle.Y, rectangle.Width, rectangle.Height);
        }
Example #13
0
        public void SetScissor(int x, int y, int w, int h)
        {
//			Debug.Assert(false);
            __scissorRect = new ImageRect(x, y, w, h);
            GL.Scissor(x, y, w, h);
        }
Example #14
0
        public Bounds2 GetViewportf()
        {
            ImageRect viewport = this.Context.GetViewport();

            return(new Bounds2(new Vector2((float)viewport.X, (float)viewport.Y), new Vector2((float)(viewport.X + viewport.Width), (float)(viewport.Y + viewport.Height))));
        }
Example #15
0
 /// <summary>Sets the rectangle of the viewport</summary>
 /// <param name="rectangle">Viewport rectangle</param>
 public void SetViewport(ImageRect rectangle)
 {
     this.state.Viewport           = rectangle;
     GraphicsContext.notifyUpdate |= GraphicsUpdate.Viewport;
 }
Example #16
0
        //TODO:GraphicsContextにAppScreenを保持できればよいが。
        public SpriteBuffer2(GraphicsContext graphics, int maxNumOfSprite, Vector2 screenScale, ImageRect rectAppScreen)
        {
            this.m_graphics    = graphics;
            this.screenScale   = screenScale;
            this.rectAppScreen = rectAppScreen;

            if (shaderProgram == null)
            {
                shaderProgram = CreateSpriteBShader();
            }

            m_maxNumOfSprite = maxNumOfSprite;

#if true
            bufferVerties   = new float[m_maxNumOfSprite * FNUM_VERTEX_PER_SPRITE];                  //0
            bufferTexcoords = new float[m_maxNumOfSprite * FNUM_TEXCOORD_PER_SPRITE];                //1
            bufferColors    = new float[m_maxNumOfSprite * FNUM_COLOR_PER_SPRITE];                   //2

            bufferWH             = new float[m_maxNumOfSprite * FNUM_WH_PER_SPRITE];                 //3
            bufferCenter         = new float[m_maxNumOfSprite * FNUM_CENTER_PER_SPRITE];             //4
            bufferRot            = new float[m_maxNumOfSprite * FNUM_ROT_PER_SPRITE];                //5
            bufferSpritePosition = new float[m_maxNumOfSprite * FNUM_SPOSITION_PER_SPRITE];          //6

            bufferIndices = new ushort[m_maxNumOfSprite * INDEX_SIZE_PER_SPRITE];

            //
            vertexBuffer = new VertexBuffer(
                m_maxNumOfSprite * VERTEX_NUM_PER_SPRITE,
                m_maxNumOfSprite * INDEX_SIZE_PER_SPRITE,
                VertexFormat.Float3,               //0
                VertexFormat.Float2,               //1
                VertexFormat.Float4,               //2
                VertexFormat.Float2,               //3
                VertexFormat.Float2,               //4
                VertexFormat.Float2,               //5
                VertexFormat.Float3                //6
                );
#else
            //正しい。
            bufferVerties   = new float[m_maxNumOfSprite * VERTEX_SIZE_PER_SPRITE * 3];                 //0
            bufferTexcoords = new float[m_maxNumOfSprite * VERTEX_SIZE_PER_SPRITE * 2];                 //1
            bufferColors    = new float[m_maxNumOfSprite * VERTEX_SIZE_PER_SPRITE * 4];                 //2
            bufferIndices   = new ushort[m_maxNumOfSprite * INDEX_SIZE_PER_SPRITE];

            //
            vertexBuffer = new VertexBuffer(
                m_maxNumOfSprite * VERTEX_SIZE_PER_SPRITE,
                m_maxNumOfSprite * INDEX_SIZE_PER_SPRITE,
                VertexFormat.Float3,
                VertexFormat.Float2,
                VertexFormat.Float4);
#endif
        }
 protected override void AddCardImage() => AddCardImage(ImageRect.Move(-1, 0), false);
Example #18
0
        private Texture2D CutTexture(string path, BoundBox rectangle)
        {
            ImageRect imageRect = new ImageRect ((int)rectangle.X, (int)rectangle.Y, (int)rectangle.Width, (int)rectangle.Height);
            if(System.IO.File.Exists(@"/Application/Content/Pic/" + path))
            {
                Image image = new Image (@"/Application/Content/Pic/" + path);
                image.Decode ();

            texture = new Texture2D ((int)rectangle.Width, (int)rectangle.Height, false, PixelFormat.Rgba);
            texture.SetPixels (0, image.Crop (imageRect).ToBuffer ());
            image.Dispose ();
            }
            else
                DebugScene.Instance.WriteLine("未找到文件:Pic/" + path);
            return texture;
        }
Example #19
0
 public CapturePoint(int wellNumber, int dropNumber, ICaptureProfile[] captureProfiles, ImageRect location, ICapturePoint parent, string regionID, RegionType regionType)
 {
     SetWellNumber(wellNumber);
     SetDropNumber(dropNumber);
     SetCaptureProfiles(captureProfiles);
     SetLocation(location);
     SetParent(parent);
     SetRegionID(regionID);
     SetRegionType(regionType);
 }
Example #20
0
        /// <summary>
        /// アニメーションリストをダブルクリックした
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void mObjLVRECT_DoubleClick(object sender, EventArgs e)
        {
            Point eM = mObjLVRECT.PointToClient(MousePosition);

            ListViewItem item = mObjLVRECT.GetItemAt(eM.X, eM.Y);

            if (item != null)
            {
                m_bInitializeing = true;

                this.BasicFormInit();
                m_SelectAnimaRectNo = int.Parse(item.Text);
                // TABメニュー移動
                mObjTab01.SelectedIndex = 1;
                m_rAR = m_raAnimaRect[m_SelectAnimaRectNo];
                mObjGBoxAEdit.Enabled = true;
                //
                mObjLFramePos.Text = m_rAR.FrameCount + "";

                // フレームが存在しないか
                if (m_rAR.FrameCount == 0)
                {
                    //
                    mObjBtnRightAdd.Enabled = false;
                    objLBRightAdd.Enabled   = false;
                    mObjBtnLeftAdd.Enabled  = false;
                    objLBLeftAdd.Enabled    = false;
                    mObjBtnDelete.Enabled   = false;
                    objLBDelete.Enabled     = false;

                    objLBWait.Enabled  = false;
                    mObjUDWait.Enabled = false;
                    //
                    mObjLBFileNameOut.Text    = "----";
                    mObjLBFileName.Enabled    = false;
                    mObjLBFileNameOut.Enabled = false;
                    mObjLBRectNoOut.Text      = "--";
                    mObjLBRectNo.Enabled      = false;
                    mObjLBRectNoOut.Enabled   = false;


                    mObjUDFrameNo.Enabled = false;
                    mObjHSFrame.Enabled   = false;
                    ////mObjXNAScreen.SetImgRectEmpty();
                }
                else
                {
                    // 0フレーム選択状態
                    mObjBtnRightAdd.Enabled = false;
                    objLBRightAdd.Enabled   = false;
                    mObjBtnLeftAdd.Enabled  = false;
                    objLBLeftAdd.Enabled    = false;

                    objLBWait.Enabled  = true;
                    mObjUDWait.Enabled = true;
                    //
                    mObjLBFileName.Enabled    = true;
                    mObjLBFileNameOut.Enabled = true;
                    mObjLBRectNo.Enabled      = true;
                    mObjLBRectNoOut.Enabled   = true;

                    mObjUDFrameNo.Enabled = true;
                    mObjHSFrame.Enabled   = true;

                    mObjUDFrameNo.Maximum = m_rAR.FrameCount - 1;
                    mObjHSFrame.Maximum   = m_rAR.FrameCount - 1;
                    AnimationRectFrame rTmp = m_rAR.aARF[0];
                    m_rIF = m_com.D2Stage.FindRectFromIndex(rTmp.imageFileNo);
                    //mObjXNAScreen.SetImgRect(m_rIF, rTmp.imageRectNo);
                    mObjLBFileNameOut.Text = m_com.D2Stage.RectFilePathFromIndex((int)rTmp.imageFileNo);
                    mObjLBRectNoOut.Text   = rTmp.imageRectNo + "";
                }

                m_bInitializeing = false;
            }
        }
Example #21
0
 /// <summary>
 /// コンストラクタ
 /// </summary>
 /// <param name="obj"></param>
 public ReadedRectImageEvent(ImageRect obj)
 {
     imageRect = obj;
 }
Example #22
0
 public static void SetupNinePatch(UIPrimitive primitive, float width, float height, float offsetX, float offsetY, ImageRect imageRect, NinePatchMargin ninePatchMargin)
 {
     if (primitive.MaxVertexCount < 16)
     {
         throw new ArgumentOutOfRangeException("primitive", "UIPrimitive MaxVertexCount is out of range.");
     }
     if (primitive.MaxIndexCount < 28)
     {
         throw new ArgumentOutOfRangeException("primitive", "UIPrimitive MaxIndexCount is out of range.");
     }
     if (primitive.Image != null)
     {
         float[] array = new float[]
         {
             0f,
             (float)ninePatchMargin.Left,
             width - (float)ninePatchMargin.Right,
             width
         };
         float[] array2 = new float[]
         {
             0f,
             (float)ninePatchMargin.Top,
             height - (float)ninePatchMargin.Bottom,
             height
         };
         if (array[1] > width)
         {
             array[1] = width;
         }
         if (array[2] < 0f)
         {
             array[2] = 0f;
         }
         if (array[1] > array[2])
         {
             array[1] = (array[2] = (array[1] + array[2]) / 2f);
         }
         if (array2[1] > height)
         {
             array2[1] = height;
         }
         if (array2[2] < 0f)
         {
             array2[2] = 0f;
         }
         if (array2[1] > array2[2])
         {
             array2[1] = (array2[2] = (array2[1] + array2[2]) / 2f);
         }
         int num     = 0;
         int num2    = 0;
         int width2  = primitive.Image.Width;
         int height2 = primitive.Image.Height;
         int num3    = width2;
         int num4    = height2;
         if (imageRect.X < width2 && imageRect.Y < height2 && imageRect.Width > 0 && imageRect.Height > 0)
         {
             if (imageRect.X > 0)
             {
                 num = imageRect.X;
             }
             num3 = num + imageRect.Width;
             if (num3 > width2)
             {
                 num3 = width2;
             }
             if (imageRect.Y > 0)
             {
                 num2 = imageRect.Y;
             }
             num4 = num2 + imageRect.Height;
             if (num4 > height2)
             {
                 num4 = height2;
             }
         }
         float   num5   = (float)width2;
         float   num6   = (float)height2;
         float   num7   = ((float)ninePatchMargin.Left < array[1] - array[0]) ? ((float)(num + ninePatchMargin.Left)) : ((float)num + array[1] - array[0]);
         float   num8   = ((float)ninePatchMargin.Right < array[3] - array[2]) ? ((float)(num3 - ninePatchMargin.Right)) : ((float)num3 - (array[3] - array[2]));
         float   num9   = ((float)ninePatchMargin.Top < array2[1] - array2[0]) ? ((float)(num2 + ninePatchMargin.Top)) : ((float)num2 + array2[1] - array2[0]);
         float   num10  = ((float)ninePatchMargin.Bottom < array2[3] - array2[2]) ? ((float)(num4 - ninePatchMargin.Bottom)) : ((float)num4 - (array2[3] - array2[2]));
         float[] array3 = new float[]
         {
             (float)num / num5,
             num7 / num5,
             num8 / num5,
             (float)num3 / num5
         };
         float[] array4 = new float[]
         {
             (float)num2 / num6,
             num9 / num6,
             num10 / num6,
             (float)num4 / num6
         };
         if (array3[2] < array3[0])
         {
             array3[2] = array3[0];
         }
         if (array4[2] < array4[0])
         {
             array4[2] = array4[0];
         }
         if (array3[1] > array3[3])
         {
             array3[1] = array3[3];
         }
         if (array4[1] > array4[3])
         {
             array4[1] = array4[3];
         }
         primitive.VertexCount = 16;
         primitive.SetIndices(new ushort[]
         {
             0,
             4,
             1,
             5,
             2,
             6,
             3,
             7,
             7,
             4,
             4,
             8,
             5,
             9,
             6,
             10,
             7,
             11,
             11,
             8,
             8,
             12,
             9,
             13,
             10,
             14,
             11,
             15
         });
         primitive.IndexCount = 28;
         for (int i = 0; i < 4; i++)
         {
             for (int j = 0; j < 4; j++)
             {
                 UIPrimitiveVertex vertex = primitive.GetVertex(i * 4 + j);
                 vertex.X = array[j] + offsetX;
                 vertex.Y = array2[i] + offsetY;
                 vertex.U = array3[j];
                 vertex.V = array4[i];
             }
         }
     }
 }