From 1207aa33c0c41902d0e3a8ec1f5a22b64d1f9d6a Mon Sep 17 00:00:00 2001 From: sekelsenmat Date: Fri, 25 Nov 2011 17:12:07 +0000 Subject: [PATCH] Adds support for RGB of depth 16 bits in GraphType in and LCL-CustomDrawn git-svn-id: trunk@33783 - --- lcl/graphtype.pp | 27 +++++++++++++++++++ .../customdrawn/customdrawnobject_android.inc | 5 ++-- .../customdrawn/customdrawnproc.pas | 5 +++- 3 files changed, 34 insertions(+), 3 deletions(-) diff --git a/lcl/graphtype.pp b/lcl/graphtype.pp index 2a3b25f534..7463d16348 100644 --- a/lcl/graphtype.pp +++ b/lcl/graphtype.pp @@ -150,6 +150,9 @@ type // don't use a contructor here, it will break compatebility with a record procedure Init; + // 16-bits formats + procedure Init_BPP16_R5G6B5(AWidth, AHeight: integer); + // Formats in RGB order procedure Init_BPP24_R8G8B8_BIO_TTB(AWidth, AHeight: integer); procedure Init_BPP24_R8G8B8_BIO_TTB_UpsideDown(AWidth, AHeight: integer); @@ -574,6 +577,30 @@ begin FillChar(Self, SizeOf(Self), 0); end; +procedure TRawImageDescription.Init_BPP16_R5G6B5(AWidth, AHeight: integer); +begin + // setup an artificial ScanLineImage with format RGB 24 bit, 24bit depth format + FillChar(Self, SizeOf(Self), 0); + + Format := ricfRGBA; + Depth := 16; // used bits per pixel + Width := AWidth; + Height := AHeight; + BitOrder := riboBitsInOrder; + ByteOrder := riboLSBFirst; + LineOrder := riloTopToBottom; + BitsPerPixel := 24; // bits per pixel. can be greater than Depth. + LineEnd := rileDWordBoundary; + RedPrec := 5; // red precision. bits for red + RedShift := 0; + GreenPrec := 6; + GreenShift := 5; // bitshift. Direction: from least to most significant + BluePrec := 5; + BlueShift:=11; +// AlphaPrec:=0; +// MaskBitsPerPixel:=0; +end; + procedure TRawImageDescription.Init_BPP24_R8G8B8_BIO_TTB(AWidth, AHeight: integer); begin // setup an artificial ScanLineImage with format RGB 24 bit, 24bit depth format diff --git a/lcl/interfaces/customdrawn/customdrawnobject_android.inc b/lcl/interfaces/customdrawn/customdrawnobject_android.inc index d20a9dabf4..77aa2564f0 100644 --- a/lcl/interfaces/customdrawn/customdrawnobject_android.inc +++ b/lcl/interfaces/customdrawn/customdrawnobject_android.inc @@ -103,7 +103,7 @@ begin engine^.height := h; engine^.state.angle := 0; - UpdateControlLazImageAndCanvas(engine^.Image, engine^.Canvas, engine^.width, engine^.height, clfBGRA32); + UpdateControlLazImageAndCanvas(engine^.Image, engine^.Canvas, engine^.width, engine^.height, clfRGB16_R5G6B5); engine^.Image.GetRawImage(engine^.RawImage); engine^.Canvas.Brush.FPColor := colRed; engine^.Canvas.Rectangle(0, 0, 100, 100); @@ -136,7 +136,8 @@ begin glGenTextures(1, @texture); glBindTexture(GL_TEXTURE_2D, texture); - glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, engine^.width, engine^.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, Pointer(engine^.RawImage.Data)); + glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, engine^.width, engine^.height, 0, + GL_RGBA, GL_UNSIGNED_SHORT_5_6_5, Pointer(engine^.RawImage.Data)); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); diff --git a/lcl/interfaces/customdrawn/customdrawnproc.pas b/lcl/interfaces/customdrawn/customdrawnproc.pas index eed2a3a433..f0d9505c4c 100644 --- a/lcl/interfaces/customdrawn/customdrawnproc.pas +++ b/lcl/interfaces/customdrawn/customdrawnproc.pas @@ -15,7 +15,9 @@ uses Forms; type - TUpdateLazImageFormat = (clfRGB24,clfRGB24UpsideDown, clfBGR24, clfBGRA32); + TUpdateLazImageFormat = ( + clfRGB16_R5G6B5, + clfRGB24, clfRGB24UpsideDown, clfBGR24, clfBGRA32); TCDWinControl = class public @@ -54,6 +56,7 @@ begin lRawImage.Init; case AFormat of + clfRGB16_R5G6B5: lRawImage.Description.Init_BPP16_R5G6B5(AWidth, AHeight); clfRGB24: lRawImage.Description.Init_BPP24_R8G8B8_BIO_TTB(AWidth, AHeight); clfRGB24UpsideDown: lRawImage.Description.Init_BPP24_R8G8B8_BIO_TTB_UpsideDown(AWidth, AHeight); clfBGR24: lRawImage.Description.Init_BPP24_B8G8R8_BIO_TTB(AWidth, AHeight);