Fix a divide-by-zero error in the trapezoid drawing logic

git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@4807 7fd9a85b-ad96-42d3-883c-3090e2eb8679
This commit is contained in:
patacongo
2012-06-06 18:07:49 +00:00
parent b2365bb867
commit 84feda595c
5 changed files with 41 additions and 11 deletions
+4
View File
@@ -2896,4 +2896,8 @@
when the work queue is enabled. This is partially because some interrupt when the work queue is enabled. This is partially because some interrupt
related logic is not built in that case. Simply disabling then re- related logic is not built in that case. Simply disabling then re-
enabling interrupts restores the proper state. enabling interrupts restores the proper state.
* graphics/nxglib/lcd/nxglib_filltrapezoid.c and fb/nxglib_filltrapezoid.c:
Fix an error when the trapezoid is only 1 line high. In this case, a
divide by zero error would occur. The fix is to draw the 1 line high
trapezoid as a run.
+1 -1
View File
@@ -2275,7 +2275,7 @@
<p> <p>
<b>STATUS:</b> <b>STATUS:</b>
Two verified configurations are available: Two verified configurations are available:
(1) The basic OS test configuration that verfies the correctnexx port of Nuttx, and (2) an extensive <a href="NuttShell.html">NuttShell (NSH)</a> configuration. (1) The basic OS test configuration that verfies the correctness port of Nuttx, and (2) an extensive <a href="NuttShell.html">NuttShell (NSH)</a> configuration.
The NSH configuration includes: The NSH configuration includes:
(1) Full network support, (1) Full network support,
(2) Verified SPI driver, (2) Verified SPI driver,
+1 -1
View File
@@ -65,7 +65,7 @@ ifeq ($(CONFIG_CDCACM),y)
CONFIGURED_APPS += examples/cdcacm CONFIGURED_APPS += examples/cdcacm
# Uncomment the following to enable the examples/usbterm built-in # Uncomment the following to enable the examples/usbterm built-in
# CONFIGURED_APPS += examples/usbterm # CONFIGURED_APPS += examples/usbterm
#else else
# Prolifics PL2303 emulation configurations # Prolifics PL2303 emulation configurations
@@ -1,8 +1,8 @@
/**************************************************************************** /****************************************************************************
* graphics/nxglib/fb/nxglib_filltrapezoid.c * graphics/nxglib/fb/nxglib_filltrapezoid.c
* *
* Copyright (C) 2008-2011 Gregory Nutt. All rights reserved. * Copyright (C) 2008-2012 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <spudmonkey@racsa.co.cr> * Author: Gregory Nutt <gnutt@nuttx.org>
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions
@@ -126,8 +126,20 @@ void NXGL_FUNCNAME(nxgl_filltrapezoid,NXGLIB_SUFFIX)(
/* Calculate the slope of the left and right side of the trapezoid */ /* Calculate the slope of the left and right side of the trapezoid */
dx1dy = b16divi((trap->bot.x1 - x1), nrows - 1); if (nrows > 1)
dx2dy = b16divi((trap->bot.x2 - x2), nrows - 1); {
dx1dy = b16divi((trap->bot.x1 - x1), nrows - 1);
dx2dy = b16divi((trap->bot.x2 - x2), nrows - 1);
}
else
{
/* The trapezoid is a run! Use the average width. */
x1 = (x1 + trap->bot.x1) >> 1;
x2 = (x2 + trap->bot.x2) >> 1;
dx1dy = 0;
dx2dy = 0;
}
/* Perform vertical clipping */ /* Perform vertical clipping */
@@ -1,8 +1,8 @@
/**************************************************************************** /****************************************************************************
* graphics/nxglib/lcd/nxglib_filltrapezoid.c * graphics/nxglib/lcd/nxglib_filltrapezoid.c
* *
* Copyright (C) 2010-2011 Gregory Nutt. All rights reserved. * Copyright (C) 2010-2012 Gregory Nutt. All rights reserved.
* Author: Gregory Nutt <spudmonkey@racsa.co.cr> * Author: Gregory Nutt <gnutt@nuttx.org>
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions * modification, are permitted provided that the following conditions
@@ -124,9 +124,23 @@ void NXGL_FUNCNAME(nxgl_filltrapezoid,NXGLIB_SUFFIX)
/* Calculate the slope of the left and right side of the trapezoid */ /* Calculate the slope of the left and right side of the trapezoid */
dy = boty - topy; dy = boty - topy;
dx1dy = b16divi((botx1 - topx1), dy); if (dy > 0)
dx2dy = b16divi((botx2 - topx2), dy); {
dx1dy = b16divi((botx1 - topx1), dy);
dx2dy = b16divi((botx2 - topx2), dy);
}
else
{
/* The trapezoid is a run! Use the average width. */
topx1 = (topx1 + botx1) >> 1;
topx2 = (topx2 + botx2) >> 1;
botx1 = topx1;
botx2 = topx2;
dx1dy = 0;
dx2dy = 0;
}
/* Perform vertical clipping */ /* Perform vertical clipping */