Page Menu
Home
Search
Configure Global Search
Log In
Files
F6429
blender-vertexcoloralpha-version3.diff
Public
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Authored By
Amorilia (amorilia)
Nov 13 2013, 1:36 PM
Size
17 KB
Subscribers
None
blender-vertexcoloralpha-version3.diff
View Options
Index: source/blender/blenkernel/intern/cdderivedmesh.c
===================================================================
--- source/blender/blenkernel/intern/cdderivedmesh.c (revision 15559)
+++ source/blender/blenkernel/intern/cdderivedmesh.c (working copy)
@@ -336,6 +336,11 @@
glEnable(GL_CULL_FACE);
glShadeModel(GL_SMOOTH);
+
+ /* for vertex color alpha channel */
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
glBegin(glmode = GL_QUADS);
for(a = 0; a < dm->numFaceData; a++, mface++, cp1 += 16) {
int new_glmode = mface->v4?GL_QUADS:GL_TRIANGLES;
@@ -345,26 +350,26 @@
glBegin(glmode = new_glmode);
}
- glColor3ub(cp1[0], cp1[1], cp1[2]);
+ glColor4ub(cp1[0], cp1[1], cp1[2], cp1[3]);
glVertex3fv(mvert[mface->v1].co);
- glColor3ub(cp1[4], cp1[5], cp1[6]);
+ glColor4ub(cp1[4], cp1[5], cp1[6], cp1[7]);
glVertex3fv(mvert[mface->v2].co);
- glColor3ub(cp1[8], cp1[9], cp1[10]);
+ glColor4ub(cp1[8], cp1[9], cp1[10], cp1[11]);
glVertex3fv(mvert[mface->v3].co);
if(mface->v4) {
- glColor3ub(cp1[12], cp1[13], cp1[14]);
+ glColor4ub(cp1[12], cp1[13], cp1[14], cp1[15]);
glVertex3fv(mvert[mface->v4].co);
}
if(useTwoSided) {
- glColor3ub(cp2[8], cp2[9], cp2[10]);
+ glColor4ub(cp2[8], cp2[9], cp2[10], cp2[11]);
glVertex3fv(mvert[mface->v3].co );
- glColor3ub(cp2[4], cp2[5], cp2[6]);
+ glColor4ub(cp2[4], cp2[5], cp2[6], cp2[7]);
glVertex3fv(mvert[mface->v2].co );
- glColor3ub(cp2[0], cp2[1], cp2[2]);
+ glColor4ub(cp2[0], cp2[1], cp2[2], cp2[3]);
glVertex3fv(mvert[mface->v1].co );
if(mface->v4) {
- glColor3ub(cp2[12], cp2[13], cp2[14]);
+ glColor4ub(cp2[12], cp2[13], cp2[14], cp2[15]);
glVertex3fv(mvert[mface->v4].co );
}
}
@@ -372,6 +377,7 @@
}
glEnd();
+ glDisable(GL_BLEND);
glShadeModel(GL_FLAT);
glDisable(GL_CULL_FACE);
}
@@ -389,6 +395,10 @@
MTFace *tf = DM_get_face_data_layer(dm, CD_MTFACE);
int i, orig, *index = DM_get_face_data_layer(dm, CD_ORIGINDEX);
+ /* for vertex color alpha channel */
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
for(i = 0; i < dm->numFaceData; i++, mf++) {
MVert *mvert;
int flag;
@@ -434,26 +444,26 @@
glBegin(mf->v4?GL_QUADS:GL_TRIANGLES);
if(tf) glTexCoord2fv(tf[i].uv[0]);
- if(cp) glColor3ub(cp[3], cp[2], cp[1]);
+ if(cp) glColor4ub(cp[3], cp[2], cp[1], cp[0]);
mvert = &mv[mf->v1];
if(mf->flag&ME_SMOOTH) glNormal3sv(mvert->no);
glVertex3fv(mvert->co);
if(tf) glTexCoord2fv(tf[i].uv[1]);
- if(cp) glColor3ub(cp[7], cp[6], cp[5]);
+ if(cp) glColor4ub(cp[7], cp[6], cp[5], cp[4]);
mvert = &mv[mf->v2];
if(mf->flag&ME_SMOOTH) glNormal3sv(mvert->no);
glVertex3fv(mvert->co);
if(tf) glTexCoord2fv(tf[i].uv[2]);
- if(cp) glColor3ub(cp[11], cp[10], cp[9]);
+ if(cp) glColor4ub(cp[11], cp[10], cp[9], cp[8]);
mvert = &mv[mf->v3];
if(mf->flag&ME_SMOOTH) glNormal3sv(mvert->no);
glVertex3fv(mvert->co);
if(mf->v4) {
if(tf) glTexCoord2fv(tf[i].uv[3]);
- if(cp) glColor3ub(cp[15], cp[14], cp[13]);
+ if(cp) glColor4ub(cp[15], cp[14], cp[13], cp[12]);
mvert = &mv[mf->v4];
if(mf->flag&ME_SMOOTH) glNormal3sv(mvert->no);
glVertex3fv(mvert->co);
@@ -463,6 +473,7 @@
if(nors) nors += 3;
}
+ glDisable(GL_BLEND);
}
static void cdDM_drawFacesTex(DerivedMesh *dm, int (*setDrawOptions)(MTFace *tface, MCol *mcol, int matnr))
@@ -479,6 +490,10 @@
float *nors= dm->getFaceDataArray(dm, CD_NORMAL);
int i, orig, *index = DM_get_face_data_layer(dm, CD_ORIGINDEX);
+ /* for vertex color alpha channel */
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
for(i = 0; i < dm->numFaceData; i++, mf++) {
int drawSmooth = (mf->flag & ME_SMOOTH);
@@ -517,28 +532,28 @@
glNormal3fv(nor);
}
- if(cp) glColor3ub(cp[3], cp[2], cp[1]);
+ if(cp) glColor4ub(cp[3], cp[2], cp[1], cp[0]);
glVertex3fv(mv[mf->v1].co);
- if(cp) glColor3ub(cp[7], cp[6], cp[5]);
+ if(cp) glColor4ub(cp[7], cp[6], cp[5], cp[4]);
glVertex3fv(mv[mf->v2].co);
- if(cp) glColor3ub(cp[11], cp[10], cp[9]);
+ if(cp) glColor4ub(cp[11], cp[10], cp[9],cp[8]);
glVertex3fv(mv[mf->v3].co);
if(mf->v4) {
- if(cp) glColor3ub(cp[15], cp[14], cp[13]);
+ if(cp) glColor4ub(cp[15], cp[14], cp[13], cp[12]);
glVertex3fv(mv[mf->v4].co);
}
} else {
- if(cp) glColor3ub(cp[3], cp[2], cp[1]);
+ if(cp) glColor4ub(cp[3], cp[2], cp[1], cp[0]);
glNormal3sv(mv[mf->v1].no);
glVertex3fv(mv[mf->v1].co);
- if(cp) glColor3ub(cp[7], cp[6], cp[5]);
+ if(cp) glColor4ub(cp[7], cp[6], cp[5], cp[4]);
glNormal3sv(mv[mf->v2].no);
glVertex3fv(mv[mf->v2].co);
- if(cp) glColor3ub(cp[11], cp[10], cp[9]);
+ if(cp) glColor4ub(cp[11], cp[10], cp[9], cp[8]);
glNormal3sv(mv[mf->v3].no);
glVertex3fv(mv[mf->v3].co);
if(mf->v4) {
- if(cp) glColor3ub(cp[15], cp[14], cp[13]);
+ if(cp) glColor4ub(cp[15], cp[14], cp[13], cp[12]);
glNormal3sv(mv[mf->v4].no);
glVertex3fv(mv[mf->v4].co);
}
@@ -549,6 +564,7 @@
if (nors) nors += 3;
}
+ glDisable(GL_BLEND);
}
static void cdDM_drawMappedFacesTex(DerivedMesh *dm, int (*setDrawOptions)(void *userData, int index), void *userData)
Index: source/blender/blenkernel/intern/subsurf_ccg.c
===================================================================
--- source/blender/blenkernel/intern/subsurf_ccg.c (revision 15559)
+++ source/blender/blenkernel/intern/subsurf_ccg.c (working copy)
@@ -1683,6 +1683,11 @@
}
glShadeModel(GL_SMOOTH);
+
+ /* for vertex color alpha channel */
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
if(col1 && col2)
glEnable(GL_CULL_FACE);
@@ -1700,23 +1705,23 @@
float *c = faceGridData[(y+1)*gridSize + x + 1].co;
float *d = faceGridData[(y+1)*gridSize + x].co;
- glColor3ub(cp1[3], cp1[2], cp1[1]);
+ glColor4ub(cp1[3], cp1[2], cp1[1], cp1[0]);
glVertex3fv(d);
- glColor3ub(cp1[7], cp1[6], cp1[5]);
+ glColor4ub(cp1[7], cp1[6], cp1[5], cp1[4]);
glVertex3fv(c);
- glColor3ub(cp1[11], cp1[10], cp1[9]);
+ glColor4ub(cp1[11], cp1[10], cp1[9], cp1[8]);
glVertex3fv(b);
- glColor3ub(cp1[15], cp1[14], cp1[13]);
+ glColor4ub(cp1[15], cp1[14], cp1[13], cp1[12]);
glVertex3fv(a);
if (useTwoSide) {
- glColor3ub(cp2[15], cp2[14], cp2[13]);
+ glColor4ub(cp2[15], cp2[14], cp2[13], cp2[12]);
glVertex3fv(a);
- glColor3ub(cp2[11], cp2[10], cp2[9]);
+ glColor4ub(cp2[11], cp2[10], cp2[9], cp2[8]);
glVertex3fv(b);
- glColor3ub(cp2[7], cp2[6], cp2[5]);
+ glColor4ub(cp2[7], cp2[6], cp2[5], cp2[4]);
glVertex3fv(c);
- glColor3ub(cp2[3], cp2[2], cp2[1]);
+ glColor4ub(cp2[3], cp2[2], cp2[1], cp2[0]);
glVertex3fv(d);
}
@@ -1728,6 +1733,8 @@
}
glEnd();
+ glDisable(GL_BLEND);
+
ccgFaceIterator_free(fi);
}
@@ -1745,6 +1752,11 @@
int gridFaces = gridSize - 1;
totface = ccgSubSurf_getNumFaces(ss);
+
+ /* for vertex color alpha channel */
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
+
for(i = 0; i < totface; i++) {
CCGFace *f = ccgdm->faceMap[i].face;
int S, x, y, numVerts = ccgSubSurf_getFaceNumVerts(ss, f);
@@ -1792,12 +1804,12 @@
b = &faceGridData[(y+1)*gridSize + x];
if(tf) glTexCoord2fv(tf->uv[0]);
- if(cp) glColor3ub(cp[3], cp[2], cp[1]);
+ if(cp) glColor4ub(cp[3], cp[2], cp[1], cp[0]);
glNormal3fv(a->no);
glVertex3fv(a->co);
if(tf) glTexCoord2fv(tf->uv[1]);
- if(cp) glColor3ub(cp[7], cp[6], cp[5]);
+ if(cp) glColor4ub(cp[7], cp[6], cp[5], cp[4]);
glNormal3fv(b->no);
glVertex3fv(b->co);
@@ -1811,12 +1823,12 @@
b = &faceGridData[(y+1)*gridSize + x];
if(tf) glTexCoord2fv(tf->uv[3]);
- if(cp) glColor3ub(cp[15], cp[14], cp[13]);
+ if(cp) glColor4ub(cp[15], cp[14], cp[13], cp[12]);
glNormal3fv(a->no);
glVertex3fv(a->co);
if(tf) glTexCoord2fv(tf->uv[2]);
- if(cp) glColor3ub(cp[11], cp[10], cp[9]);
+ if(cp) glColor4ub(cp[11], cp[10], cp[9], cp[8]);
glNormal3fv(b->no);
glVertex3fv(b->co);
@@ -1838,19 +1850,19 @@
ccgDM_glNormalFast(a, b, c, d);
if(tf) glTexCoord2fv(tf->uv[1]);
- if(cp) glColor3ub(cp[7], cp[6], cp[5]);
+ if(cp) glColor4ub(cp[7], cp[6], cp[5], cp[4]);
glVertex3fv(d);
if(tf) glTexCoord2fv(tf->uv[2]);
- if(cp) glColor3ub(cp[11], cp[10], cp[9]);
+ if(cp) glColor4ub(cp[11], cp[10], cp[9], cp[8]);
glVertex3fv(c);
if(tf) glTexCoord2fv(tf->uv[3]);
- if(cp) glColor3ub(cp[15], cp[14], cp[13]);
+ if(cp) glColor4ub(cp[15], cp[14], cp[13], cp[12]);
glVertex3fv(b);
if(tf) glTexCoord2fv(tf->uv[0]);
- if(cp) glColor3ub(cp[3], cp[2], cp[1]);
+ if(cp) glColor4ub(cp[3], cp[2], cp[1], cp[0]);
glVertex3fv(a);
if(tf) tf++;
@@ -1861,6 +1873,7 @@
}
}
}
+ glDisable(GL_BLEND);
}
static void ccgDM_drawFacesTex(DerivedMesh *dm, int (*setDrawOptions)(MTFace *tface, MCol *mcol, int matnr))
Index: source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- source/blender/blenkernel/intern/DerivedMesh.c (revision 15559)
+++ source/blender/blenkernel/intern/DerivedMesh.c (working copy)
@@ -727,6 +727,10 @@
/* always use smooth shading even for flat faces, else vertex colors wont interpolate */
glShadeModel(GL_SMOOTH);
+
+ /* for vertex color alpha channel */
+ glEnable(GL_BLEND);
+ glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
if (vertexCos) {
EditVert *eve;
@@ -764,41 +768,41 @@
glNormal3fv(emdm->faceNos[i]);
if(tf) glTexCoord2fv(tf->uv[0]);
- if(cp) glColor3ub(cp[3], cp[2], cp[1]);
+ if(cp) glColor4ub(cp[3], cp[2], cp[1], cp[0]);
glVertex3fv(vertexCos[(int) efa->v1->tmp.l]);
if(tf) glTexCoord2fv(tf->uv[1]);
- if(cp) glColor3ub(cp[7], cp[6], cp[5]);
+ if(cp) glColor4ub(cp[7], cp[6], cp[5], cp[4]);
glVertex3fv(vertexCos[(int) efa->v2->tmp.l]);
if(tf) glTexCoord2fv(tf->uv[2]);
- if(cp) glColor3ub(cp[11], cp[10], cp[9]);
+ if(cp) glColor4ub(cp[11], cp[10], cp[9], cp[8]);
glVertex3fv(vertexCos[(int) efa->v3->tmp.l]);
if(efa->v4) {
if(tf) glTexCoord2fv(tf->uv[3]);
- if(cp) glColor3ub(cp[15], cp[14], cp[13]);
+ if(cp) glColor4ub(cp[15], cp[14], cp[13], cp[12]);
glVertex3fv(vertexCos[(int) efa->v4->tmp.l]);
}
} else {
if(tf) glTexCoord2fv(tf->uv[0]);
- if(cp) glColor3ub(cp[3], cp[2], cp[1]);
+ if(cp) glColor4ub(cp[3], cp[2], cp[1], cp[0]);
glNormal3fv(vertexNos[(int) efa->v1->tmp.l]);
glVertex3fv(vertexCos[(int) efa->v1->tmp.l]);
if(tf) glTexCoord2fv(tf->uv[1]);
- if(cp) glColor3ub(cp[7], cp[6], cp[5]);
+ if(cp) glColor4ub(cp[7], cp[6], cp[5], cp[4]);
glNormal3fv(vertexNos[(int) efa->v2->tmp.l]);
glVertex3fv(vertexCos[(int) efa->v2->tmp.l]);
if(tf) glTexCoord2fv(tf->uv[2]);
- if(cp) glColor3ub(cp[11], cp[10], cp[9]);
+ if(cp) glColor4ub(cp[11], cp[10], cp[9], cp[8]);
glNormal3fv(vertexNos[(int) efa->v3->tmp.l]);
glVertex3fv(vertexCos[(int) efa->v3->tmp.l]);
if(efa->v4) {
if(tf) glTexCoord2fv(tf->uv[3]);
- if(cp) glColor3ub(cp[15], cp[14], cp[13]);
+ if(cp) glColor4ub(cp[15], cp[14], cp[13], cp[12]);
glNormal3fv(vertexNos[(int) efa->v4->tmp.l]);
glVertex3fv(vertexCos[(int) efa->v4->tmp.l]);
}
@@ -836,41 +840,41 @@
glNormal3fv(efa->n);
if(tf) glTexCoord2fv(tf->uv[0]);
- if(cp) glColor3ub(cp[3], cp[2], cp[1]);
+ if(cp) glColor4ub(cp[3], cp[2], cp[1], cp[0]);
glVertex3fv(efa->v1->co);
if(tf) glTexCoord2fv(tf->uv[1]);
- if(cp) glColor3ub(cp[7], cp[6], cp[5]);
+ if(cp) glColor4ub(cp[7], cp[6], cp[5], cp[4]);
glVertex3fv(efa->v2->co);
if(tf) glTexCoord2fv(tf->uv[2]);
- if(cp) glColor3ub(cp[11], cp[10], cp[9]);
+ if(cp) glColor4ub(cp[11], cp[10], cp[9], cp[8]);
glVertex3fv(efa->v3->co);
if(efa->v4) {
if(tf) glTexCoord2fv(tf->uv[3]);
- if(cp) glColor3ub(cp[15], cp[14], cp[13]);
+ if(cp) glColor4ub(cp[15], cp[14], cp[13], cp[12]);
glVertex3fv(efa->v4->co);
}
} else {
if(tf) glTexCoord2fv(tf->uv[0]);
- if(cp) glColor3ub(cp[3], cp[2], cp[1]);
+ if(cp) glColor4ub(cp[3], cp[2], cp[1], cp[0]);
glNormal3fv(efa->v1->no);
glVertex3fv(efa->v1->co);
if(tf) glTexCoord2fv(tf->uv[1]);
- if(cp) glColor3ub(cp[7], cp[6], cp[5]);
+ if(cp) glColor4ub(cp[7], cp[6], cp[5], cp[4]);
glNormal3fv(efa->v2->no);
glVertex3fv(efa->v2->co);
if(tf) glTexCoord2fv(tf->uv[2]);
- if(cp) glColor3ub(cp[11], cp[10], cp[9]);
+ if(cp) glColor4ub(cp[11], cp[10], cp[9], cp[8]);
glNormal3fv(efa->v3->no);
glVertex3fv(efa->v3->co);
if(efa->v4) {
if(tf) glTexCoord2fv(tf->uv[3]);
- if(cp) glColor3ub(cp[15], cp[14], cp[13]);
+ if(cp) glColor4ub(cp[15], cp[14], cp[13], cp[12]);
glNormal3fv(efa->v4->no);
glVertex3fv(efa->v4->co);
}
@@ -879,6 +883,7 @@
}
}
}
+ glDisable(GL_BLEND);
}
static void emDM_drawFacesTex(DerivedMesh *dm, int (*setDrawOptions)(MTFace *tface, MCol *mcol, int matnr))
Index: source/blender/include/BSE_trans_types.h
===================================================================
--- source/blender/include/BSE_trans_types.h (revision 15559)
+++ source/blender/include/BSE_trans_types.h (working copy)
@@ -74,7 +74,8 @@
} TransVert;
typedef struct VPaint {
- float r, g, b, a;
+ float r, g, b, alpha;
+ float a; /* amount of pressure */
float size; /* of brush */
float gamma, mul;
short mode, flag;
Index: source/blender/src/buttons_editing.c
===================================================================
--- source/blender/src/buttons_editing.c (revision 15559)
+++ source/blender/src/buttons_editing.c (working copy)
@@ -6060,10 +6060,13 @@
uiDefButF(block, NUMSLI, B_NOP, "R ", 979,170,150,19, &Gvp.r, 0.0, 1.0, B_VPCOLSLI, 0, "The amount of red used for painting");
uiDefButF(block, NUMSLI, B_NOP, "G ", 979,150,150,19, &Gvp.g, 0.0, 1.0, B_VPCOLSLI, 0, "The amount of green used for painting");
uiDefButF(block, NUMSLI, B_NOP, "B ", 979,130,150,19, &Gvp.b, 0.0, 1.0, B_VPCOLSLI, 0, "The amount of blue used for painting");
+ uiBlockEndAlign(block);
+
+ uiDefButF(block, NUMSLI, B_NOP, "A ", 979,105,150,19, &Gvp.alpha, 0.0, 1.0, B_VPCOLSLI, 0, "The amount of alpha used for painting");
uiBlockBeginAlign(block);
- uiDefButF(block, NUMSLI, B_NOP, "Opacity ", 979,105,222,19, &Gvp.a, 0.0, 1.0, 0, 0, "The amount of pressure on the brush");
- uiDefButF(block, NUMSLI, B_NOP, "Size ", 979,85,222,19, &Gvp.size, 2.0, 64.0, 0, 0, "The size of the brush");
+ uiDefButF(block, NUMSLI, B_NOP, "Pressure ", 979,75,222,19, &Gvp.a, 0.0, 1.0, 0, 0, "The amount of pressure on the brush");
+ uiDefButF(block, NUMSLI, B_NOP, "Size ", 979,55,222,19, &Gvp.size, 2.0, 64.0, 0, 0, "The size of the brush");
uiBlockEndAlign(block);
uiDefButF(block, COL, B_REDR, "", 1140,150,60,40, &(Gvp.r), 0, 0, 0, B_VPCOLSLI, "");
Index: source/blender/src/vpaint.c
===================================================================
--- source/blender/src/vpaint.c (revision 15559)
+++ source/blender/src/vpaint.c (working copy)
@@ -110,8 +110,8 @@
#define MAXINDEX 512000
-VPaint Gvp= {1.0, 1.0, 1.0, 0.2, 25.0, 1.0, 1.0, 0, VP_AREA+VP_SOFT+VP_SPRAY, 0};
-VPaint Gwp= {1.0, 1.0, 1.0, 1.0, 25.0, 1.0, 1.0, 0, VP_AREA+VP_SOFT, 0};
+VPaint Gvp= {1.0, 1.0, 1.0, 1.0, 0.2, 25.0, 1.0, 1.0, 0, VP_AREA+VP_SOFT+VP_SPRAY, 0};
+VPaint Gwp= {1.0, 1.0, 1.0, 1.0, 1.0, 25.0, 1.0, 1.0, 0, VP_AREA+VP_SOFT, 0};
static int *get_indexarray(void)
{
@@ -157,7 +157,7 @@
static unsigned int vpaint_get_current_col(VPaint *vp)
{
- return rgba_to_mcol(vp->r, vp->g, vp->b, 1.0f);
+ return rgba_to_mcol(vp->r, vp->g, vp->b, vp->alpha);
}
void do_shared_vertexcol(Mesh *me)
@@ -532,6 +532,7 @@
Gvp.r= cp[0]/255.0f;
Gvp.g= cp[1]/255.0f;
Gvp.b= cp[2]/255.0f;
+ /* do not sample alpha channel? */
}
else {
Brush *brush= G.scene->toolsettings->imapaint.brush;
@@ -540,6 +541,7 @@
brush->rgb[0]= cp[0]/255.0f;
brush->rgb[1]= cp[1]/255.0f;
brush->rgb[2]= cp[2]/255.0f;
+ /* do not sample alpha channel? */
allqueue(REDRAWVIEW3D, 0);
allqueue(REDRAWIMAGE, 0);
@@ -565,7 +567,7 @@
cp2= (char *)&col2;
cp= (char *)&col;
- cp[0]= 255;
+ cp[0]= (mfac*cp1[0]+fac*cp2[0])>>8; /* mix alpha channels */
cp[1]= (mfac*cp1[1]+fac*cp2[1])/255;
cp[2]= (mfac*cp1[2]+fac*cp2[2])/255;
cp[3]= (mfac*cp1[3]+fac*cp2[3])/255;
@@ -585,7 +587,7 @@
cp2= (char *)&col2;
cp= (char *)&col;
- cp[0]= 255;
+ cp[0]= cp1[0]; /* keep original alpha */
temp= cp1[1] + ((fac*cp2[1])/255);
if(temp>254) cp[1]= 255; else cp[1]= temp;
temp= cp1[2] + ((fac*cp2[2])/255);
@@ -608,7 +610,7 @@
cp2= (char *)&col2;
cp= (char *)&col;
- cp[0]= 255;
+ cp[0]= cp1[0]; /* keep original alpha */
temp= cp1[1] - ((fac*cp2[1])/255);
if(temp<0) cp[1]= 0; else cp[1]= temp;
temp= cp1[2] - ((fac*cp2[2])/255);
@@ -634,7 +636,7 @@
cp= (char *)&col;
/* first mul, then blend the fac */
- cp[0]= 255;
+ cp[0]= cp1[0]; /* keep original alpha */
cp[1]= (mfac*cp1[1] + fac*((cp2[1]*cp1[1])/255) )/255;
cp[2]= (mfac*cp1[2] + fac*((cp2[2]*cp1[2])/255) )/255;
cp[3]= (mfac*cp1[3] + fac*((cp2[3]*cp1[3])/255) )/255;
@@ -663,7 +665,7 @@
if (cp1[1]+cp1[2]+cp1[3] > cp2[1]+cp2[2]+cp2[3])
return col1;
- cp[0]= 255;
+ cp[0]= cp1[0]; /* keep original alpha */
cp[1]= (mfac*cp1[1]+fac*cp2[1])/255;
cp[2]= (mfac*cp1[2]+fac*cp2[2])/255;
cp[3]= (mfac*cp1[3]+fac*cp2[3])/255;
@@ -691,7 +693,7 @@
if (cp1[1]+cp1[2]+cp1[3] < cp2[1]+cp2[2]+cp2[3])
return col1;
- cp[0]= 255;
+ cp[0]= cp1[0]; /* keep original alpha */
cp[1]= (mfac*cp1[1]+fac*cp2[1])/255;
cp[2]= (mfac*cp1[2]+fac*cp2[2])/255;
cp[3]= (mfac*cp1[3]+fac*cp2[3])/255;
File Metadata
Details
Mime Type
text/x-diff
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
1d/1b/8e1a00a66d77eac304162e5868a8
Event Timeline
Log In to Comment