Ejemplo n.º 1
0
        private unsafe void tライン描画XRGB32(int n)
        {
            // Snap は RGB32、Textureは X8R8G8B8

            UInt32 *ptrTexture = this.ptrTexture[n];

            for (int y = n; y < this.n高さpx; y += CDirectShow.n並列度)
            {
                byte *ptrPixel = ptrSnap + (((this.n高さpx - y) - 1) * this.nスキャンライン幅byte);

                // アルファ無視なので一括コピー。CopyMemory() は自前でループ展開するよりも速い。
                CWin32.CopyMemory((void *)ptrTexture, (void *)ptrPixel, (uint)(this.n幅px * 4));

                ptrTexture += this.n幅px * CDirectShow.n並列度;
            }
        }
Ejemplo n.º 2
0
 [DllImport(DLL_PATH)] public static extern UIntPtr librg_entity_query(ref librg_ctx_t ctx, UInt32 entity, UInt32 **result);
Ejemplo n.º 3
0
        private unsafe void tライン描画ARGB32(int n)
        {
            // Snap は RGB32、Textureは A8R8G8B8

            UInt32 *ptrTexture = this.ptrTexture[n];

            for (int y = n; y < this.n高さpx; y += CDirectShow.n並列度)
            {
                UInt32 *ptrPixel = (UInt32 *)(ptrSnap + (((this.n高さpx - y) - 1) * this.nスキャンライン幅byte));

                //for( int x = 0; x < this.n幅px; x++ )
                //	*( ptrTexture + x ) = 0xFF000000 | *ptrPixel++;
                //			↓ループ展開により高速化。160fps の曲が 200fps まで上がった。

                if (this.n幅px == 0)
                {
                    goto LEXIT;
                }
                UInt32 *pt     = ptrTexture;
                UInt32  nAlpha = 0xFF000000;
                int     d      = (this.n幅px % 32);

                switch (d)
                {
                case 1: goto L031;

                case 2: goto L030;

                case 3: goto L029;

                case 4: goto L028;

                case 5: goto L027;

                case 6: goto L026;

                case 7: goto L025;

                case 8: goto L024;

                case 9: goto L023;

                case 10: goto L022;

                case 11: goto L021;

                case 12: goto L020;

                case 13: goto L019;

                case 14: goto L018;

                case 15: goto L017;

                case 16: goto L016;

                case 17: goto L015;

                case 18: goto L014;

                case 19: goto L013;

                case 20: goto L012;

                case 21: goto L011;

                case 22: goto L010;

                case 23: goto L009;

                case 24: goto L008;

                case 25: goto L007;

                case 26: goto L006;

                case 27: goto L005;

                case 28: goto L004;

                case 29: goto L003;

                case 30: goto L002;

                case 31: goto L001;
                }

                L000 : *pt++ = nAlpha | *ptrPixel++;
                L001 : *pt++ = nAlpha | *ptrPixel++;
                L002 : *pt++ = nAlpha | *ptrPixel++;
                L003 : *pt++ = nAlpha | *ptrPixel++;
                L004 : *pt++ = nAlpha | *ptrPixel++;
                L005 : *pt++ = nAlpha | *ptrPixel++;
                L006 : *pt++ = nAlpha | *ptrPixel++;
                L007 : *pt++ = nAlpha | *ptrPixel++;
                L008 : *pt++ = nAlpha | *ptrPixel++;
                L009 : *pt++ = nAlpha | *ptrPixel++;
                L010 : *pt++ = nAlpha | *ptrPixel++;
                L011 : *pt++ = nAlpha | *ptrPixel++;
                L012 : *pt++ = nAlpha | *ptrPixel++;
                L013 : *pt++ = nAlpha | *ptrPixel++;
                L014 : *pt++ = nAlpha | *ptrPixel++;
                L015 : *pt++ = nAlpha | *ptrPixel++;
                L016 : *pt++ = nAlpha | *ptrPixel++;
                L017 : *pt++ = nAlpha | *ptrPixel++;
                L018 : *pt++ = nAlpha | *ptrPixel++;
                L019 : *pt++ = nAlpha | *ptrPixel++;
                L020 : *pt++ = nAlpha | *ptrPixel++;
                L021 : *pt++ = nAlpha | *ptrPixel++;
                L022 : *pt++ = nAlpha | *ptrPixel++;
                L023 : *pt++ = nAlpha | *ptrPixel++;
                L024 : *pt++ = nAlpha | *ptrPixel++;
                L025 : *pt++ = nAlpha | *ptrPixel++;
                L026 : *pt++ = nAlpha | *ptrPixel++;
                L027 : *pt++ = nAlpha | *ptrPixel++;
                L028 : *pt++ = nAlpha | *ptrPixel++;
                L029 : *pt++ = nAlpha | *ptrPixel++;
                L030 : *pt++ = nAlpha | *ptrPixel++;
                L031 : *pt++ = nAlpha | *ptrPixel++;
                if ((pt - ptrTexture) < this.n幅px)
                {
                    goto L000;
                }

LEXIT:
                ptrTexture += this.n幅px * CDirectShow.n並列度;
            }
        }