2 Copyright © 1995-2011, The AROS Development Team. All rights reserved.
5 Desc: Set one color register for this Viewport
9 #include <aros/debug.h>
10 #include <proto/oop.h>
12 #include "graphics_intern.h"
13 #include "gfxfuncsupport.h"
15 /*****************************************************************************
18 #include <graphics/view.h>
19 #include <proto/graphics.h>
21 AROS_LH5(void, SetRGB32
,
24 AROS_LHA(struct ViewPort
*, vp
, A0
),
25 AROS_LHA(ULONG
, n
, D0
),
26 AROS_LHA(ULONG
, r
, D1
),
27 AROS_LHA(ULONG
, g
, D2
),
28 AROS_LHA(ULONG
, b
, D3
),
31 struct GfxBase
*, GfxBase
, 142, Graphics
)
34 Changes a single color of a viewport.
37 vp - Modify this viewport
38 n - Change this color. If the color is outside the range of
39 valid colors, it will be ignored.
40 r, g, b - The new values for the red, green and blue. The
41 valid range is from 0x000000 (no intensity) to
42 0xFFFFFFFF (full intensity).
45 If there is a ColorMap for this viewport, then the value will
46 be stored in the ColorMap.
47 The selected color register is changed to match your specs.
48 If the color value is unused then nothing will happen.
51 Lower order bits of the palette specification will be discarded,
52 depending on the color palette resolution of the target graphics
53 device. Use 0xffffffff for the full value, 0x7fffffff for 50%,
54 etc. You can find out the palette range for your screen by
55 querying the graphics data base.
67 *****************************************************************************/
71 struct ViewPortExtra
*vpe
= NULL
;
75 HIDDT_ColorModel colmod
;
79 SetRGB32CM(vp
->ColorMap
, n
, r
, g
, b
);
80 /* If we have a colormap, we can find ViewPortExtra faster */
81 vpe
= vp
->ColorMap
->cm_vpe
;
85 * SetRGB32() can be called before MakeVPort().
86 * In order to make it working in such a situation we get bitmap object
87 * pointer from the bitmap itself, if possible.
88 * VPE_DATA is built and attached by MakeVPort(), until this it doesn't exist.
89 * Taking into account comments in SetRGB4(), perhaps order of things
90 * should be changed. It's likely MakeVPort()'s job to load ColorMap
91 * data into the driver.
93 if (IS_HIDD_BM(vp
->RasInfo
->BitMap
))
94 /* HIDD bitmap, just take object pointer */
95 bm
= HIDD_BM_OBJ(vp
->RasInfo
->BitMap
);
98 /* Planar bitmap. Take object from ViewPortExtra (if present). */
100 vpe
= (struct ViewPortExtra
*)GfxLookUp(vp
);
102 if ((!vpe
) || (!VPE_DATA(vpe
)))
105 bm
= VPE_DATA(vpe
)->Bitmap
;
108 /* HIDDT_Color entries are UWORD */
109 hidd_col
.red
= r
>> 16;
110 hidd_col
.green
= g
>> 16;
111 hidd_col
.blue
= b
>> 16;
114 OOP_GetAttr(bm
, aHidd_BitMap_PixFmt
, (IPTR
*)&pf
);
115 OOP_GetAttr(pf
, aHidd_PixFmt_ColorModel
, &colmod
);
117 if (vHidd_ColorModel_Palette
== colmod
|| vHidd_ColorModel_TrueColor
== colmod
)
119 HIDD_BM_SetColors(bm
, &hidd_col
, n
, 1);
121 D(bug("SetRGB32: bm %p, hbm %p, col %d (%x %x %x %x) mapped to %x\n"
122 , vp
->RasInfo
->BitMap
125 , hidd_col
.red
, hidd_col
.green
, hidd_col
.blue
, hidd_col
.alpha
129 * Store the actual pixel value in associated LUT.
130 * This LUT is used by graphics.library for blitting LUT images
131 * to direct-color screens.
133 if (IS_HIDD_BM(vp
->RasInfo
->BitMap
))
134 HIDD_BM_PIXTAB(vp
->RasInfo
->BitMap
)[n
] = hidd_col
.pixval
;