Example #1
0
        public override void DrawSpriteModel(BaseTexture texture, mspriteframe_t frame, Vector3 up, Vector3 right, Vector3 origin)
        {
            GL.Color3(1f, 1, 1);

            this.Device.DisableMultitexture( );

            GL.Enable(EnableCap.Texture2D);

            texture.Bind( );

            GL.Enable(EnableCap.AlphaTest);
            GL.Begin(PrimitiveType.Quads);

            GL.TexCoord2(0f, 1);
            var point = origin + up * frame.down + right * frame.left;

            GL.Vertex3(point.X, point.Y, point.Z);

            GL.TexCoord2(0f, 0);
            point = origin + up * frame.up + right * frame.left;
            GL.Vertex3(point.X, point.Y, point.Z);

            GL.TexCoord2(1f, 0);
            point = origin + up * frame.up + right * frame.right;
            GL.Vertex3(point.X, point.Y, point.Z);

            GL.TexCoord2(1f, 1);
            point = origin + up * frame.down + right * frame.right;
            GL.Vertex3(point.X, point.Y, point.Z);

            GL.End( );

            GL.Disable(EnableCap.Texture2D);
            GL.Disable(EnableCap.AlphaTest);
        }
        /// <summary>
        ///
        /// </summary>
        /// <returns>Offset of next data block</returns>
        private Int32 LoadSpriteFrame(ByteArraySegment pin, out Object ppframe, Int32 framenum, Func <String, ByteArraySegment, Int32, Int32, Int32> onLoadSpriteTexture)
        {
            var pinframe = Utilities.BytesToStructure <dspriteframe_t>(pin.Data, pin.StartIndex);

            var width  = EndianHelper.LittleLong(pinframe.width);
            var height = EndianHelper.LittleLong(pinframe.height);
            var size   = width * height;

            var pspriteframe = new mspriteframe_t( );

            ppframe = pspriteframe;

            pspriteframe.width  = width;
            pspriteframe.height = height;
            var orgx = EndianHelper.LittleLong(pinframe.origin[0]);
            var orgy = EndianHelper.LittleLong(pinframe.origin[1]);

            pspriteframe.up    = orgy;         // origin[1];
            pspriteframe.down  = orgy - height;
            pspriteframe.left  = orgx;         // origin[0];
            pspriteframe.right = width + orgx; // origin[0];

            var name = Name + "_" + framenum.ToString( );

            var index = onLoadSpriteTexture(name, new ByteArraySegment(pin.Data, pin.StartIndex + dspriteframe_t.SizeInBytes), width, height);

            pspriteframe.gl_texturenum = index;

            return(pin.StartIndex + dspriteframe_t.SizeInBytes + size);
        }
Example #3
0
    public static void R_DrawSpriteModel(entity_t e)
    {
        // don't even bother culling, because it's just a single
        // polygon without a surface cache
        mspriteframe_t frame   = R_GetSpriteFrame(e);
        msprite_t      psprite = (msprite_t)e.model.cache.data;

        Vector3 v_forward, right, up;

        if (psprite.type == q_shared.SPR_ORIENTED)
        {
            // bullet marks on walls
            Mathlib.AngleVectors(ref e.angles, out v_forward, out right, out up); // Uze: changed from _CurrentEntity to e
        }
        else
        {                   // normal sprite
            up    = vup;    // vup;
            right = vright; // vright;
        }

        GL.Color3(1f, 1, 1);

        GL_DisableMultitexture();

        GL_Bind(frame.gl_texturenum);

        GL.Enable(EnableCap.AlphaTest);
        GL.Begin(BeginMode.Quads);

        GL.TexCoord2(0f, 1);
        Vector3 point = e.origin + up * frame.down + right * frame.left;

        GL.Vertex3(point);

        GL.TexCoord2(0f, 0);
        point = e.origin + up * frame.up + right * frame.left;
        GL.Vertex3(point);

        GL.TexCoord2(1f, 0);
        point = e.origin + up * frame.up + right * frame.right;
        GL.Vertex3(point);

        GL.TexCoord2(1f, 1);
        point = e.origin + up * frame.down + right * frame.right;
        GL.Vertex3(point);

        GL.End();
        GL.Disable(EnableCap.AlphaTest);
    }
Example #4
0
 public virtual void DrawSpriteModel(BaseTexture texture, mspriteframe_t frame, Vector3 up, Vector3 right, Vector3 origin)
 {
     throw new NotImplementedException( );
 }
Example #5
0
        //=============================================================================
        /*
        =================
        Mod_LoadSpriteFrame
        =================
        */
        static void Mod_LoadSpriteFrame(bspfile.ByteBuffer pin, ref object ppframe)
        {
            dspriteframe_t		pinframe;
            mspriteframe_t		pspriteframe;
            int					width, height, size;
            int[]               origin = new int[2];

            pinframe = (dspriteframe_t)pin;

            width = pinframe.width;
            height = pinframe.height;
            size = width * height;

            pspriteframe = new mspriteframe_t();
            pspriteframe.pixels = new byte[size*render.r_pixbytes];

            ppframe = pspriteframe;

            pspriteframe.width = width;
            pspriteframe.height = height;
            origin[0] = pinframe.origin[0];
            origin[1] = pinframe.origin[1];

            pspriteframe.up = origin[1];
            pspriteframe.down = origin[1] - height;
            pspriteframe.left = origin[0];
            pspriteframe.right = width + origin[0];

            if (render.r_pixbytes == 1)
            {
                pin.ofs += sizeof_dspriteframe_t;
                for(int kk = 0; kk < size; kk++)
                    pspriteframe.pixels[kk] = pin.buffer[pin.ofs + kk];
            }
            else if (render.r_pixbytes == 2)
            {
            }
            else
            {
                sys_linux.Sys_Error ("Mod_LoadSpriteFrame: driver set invalid r_pixbytes: " + render.r_pixbytes + "\n");
            }

            pin.ofs += size;
        }