Exemple #1
0
/// Flush the contents of this context to the browser's 3D device.
void OpenGLContext::FlushContext()
{
	if(flush_pending())
	{
		// A flush is pending so do nothing; just drop this flush on the floor.
		return;
	}
	set_flush_pending(true);
	context_.SwapBuffers(pp::CompletionCallback(&FlushCallback, this));
}
Exemple #2
0
 void GboxInstance::FlushPixelBuffer() {
   if (!IsContextValid())
     return;
   // Note that the pixel lock is held while the buffer is copied into the
   // device context and then flushed.
   m_board->redraw((uint32_t*)pixel_buffer_->data());
   graphics_2d_context_->PaintImageData(*pixel_buffer_, pp::Point());
   if (flush_pending())
     return;
   set_flush_pending(true);
   graphics_2d_context_->Flush(pp::CompletionCallback(&FlushCallback, this));
 }
Exemple #3
0
void OpenGLContext::FlushContext() {
  if (flush_pending()) {
    // A flush is pending so do nothing; just drop this flush on the floor.
    return;
  }
  set_flush_pending(true);

	OSNacl* os = (OSNacl*)OS::get_singleton();
	MakeContextCurrent(instance);
	os->iterate();

  context_.SwapBuffers(pp::CompletionCallback(&FlushCallback, this));
}
	void artwork_reader_manager_ng_t::on_reader_completion (const artwork_reader_ng_t * ptr)
	{
		t_size index;
		if (find_current_reader(ptr, index))
		{
			m_current_readers[index]->wait_for_and_release_thread();
			m_current_readers[index]->send_completion_notification(m_current_readers[index]);
			m_current_readers.remove_by_idx(index);
		}
		else
		{
			if (find_aborting_reader(ptr, index))
			{
				m_aborting_readers[index]->wait_for_and_release_thread();
				m_aborting_readers.remove_by_idx(index);
			}
		}
		flush_pending();
	}
	void artwork_reader_manager_ng_t::request(const metadb_handle_ptr & p_handle, pfc::rcptr_t<artwork_reader_ng_t> & p_out, t_size cx, t_size cy, COLORREF cr_back, bool b_reflection, completion_notify_artwork_base_t::ptr_t p_notify)
	{
		pfc::rcptr_t<artwork_reader_ng_t> p_new_reader;
		{
			p_new_reader = pfc::rcnew_t<artwork_reader_ng_t>();
			p_new_reader->initialise(static_api_ptr_t<album_art_manager>()->instantiate(), m_requestIds,
				m_repositories,
				artwork_panel::cfg_fb2k_artwork_mode,
				p_handle,
				cx, cy,
				cr_back,
				b_reflection,
				p_notify,
				this);
			m_pending_readers.add_item(p_new_reader);
			p_out = p_new_reader;
			flush_pending();
		}
	}
Exemple #6
0
static bool flush_dot_state(struct dot_istream *dstream, size_t *destp)
{
	unsigned int i = 0;

	if (!dstream->state_no_cr)
		dstream->pending[i++] = '\r';
	if (dstream->state_no_lf)
		dstream->state_no_lf = FALSE;
	else if (dstream->state > 1)
		dstream->pending[i++] = '\n';
	dstream->pending[i] = '\0';

	if (dstream->state != 4)
		dstream->state = 0;
	else {
		/* \r\n.\r seen, go back to \r state */
		dstream->state = 1;
	}
	return flush_pending(dstream, destp);
}
Exemple #7
0
static ssize_t i_stream_dot_read(struct istream_private *stream)
{
	/* @UNSAFE */
	struct dot_istream *dstream = (struct dot_istream *)stream;
	const unsigned char *data;
	size_t i, dest, size, avail;
	ssize_t ret, ret1;

	if (dstream->pending[0] != '\0') {
		if (!i_stream_try_alloc(stream, 1, &avail))
			return -2;
		dest = stream->pos;
		(void)flush_pending(dstream, &dest);
	} else {
		dest = stream->pos;
	}

	if (dstream->dot_eof) {
		stream->istream.eof = TRUE;
		return i_stream_dot_return(stream, dest, -1);
	}

	/* we have to update stream->pos before reading more data */
	ret1 = i_stream_dot_return(stream, dest, 0);
	if ((ret = i_stream_dot_read_some(dstream)) <= 0) {
		if (ret1 != 0)
			return ret1;
		dest = stream->pos;
		if (ret == -1 && dstream->state != 0)
			(void)flush_dot_state(dstream, &dest);
		return i_stream_dot_return(stream, dest, ret);
	}
	dest = stream->pos;

	data = i_stream_get_data(stream->parent, &size);
	for (i = 0; i < size && dest < stream->buffer_size; i++) {
		switch (dstream->state) {
		case 0:
			break;
		case 1:
			/* CR seen */
			if (data[i] == '\n')
				dstream->state++;
			else {
				if (!flush_dot_state(dstream, &dest))
					goto end;
			}
			break;
		case 2:
			/* [CR]LF seen */
			if (data[i] == '.')
				dstream->state++;
			else {
				if (!flush_dot_state(dstream, &dest))
					goto end;
			}
			break;
		case 3:
			/* [CR]LF. seen */
			if (data[i] == '\r')
				dstream->state++;
			else if (data[i] == '\n') {
				/* EOF */
				i_stream_dot_eof(dstream, &dest);
				i++;
				goto end;
			} else {
				/* drop the initial dot */
				if (!flush_dot_state(dstream, &dest))
					goto end;
			}
			break;
		case 4:
			/* [CR]LF.CR seen */
			if (data[i] == '\n') {
				/* EOF */
				i_stream_dot_eof(dstream, &dest);
				i++;
				goto end;
			} else {
				/* drop the initial dot */
				if (!flush_dot_state(dstream, &dest))
					goto end;
			}
		}
		if (dstream->state == 0) {
			if (data[i] == '\r') {
				dstream->state = 1;
				dstream->state_no_cr = FALSE;
			} else if (data[i] == '\n') {
				dstream->state = 2;
				dstream->state_no_cr = TRUE;
			} else {
				stream->w_buffer[dest++] = data[i];
			}
		}
	}
end:
	i_stream_skip(stream->parent, i);

	ret = i_stream_dot_return(stream, dest, 0) + ret1;
	if (ret == 0)
		return i_stream_dot_read(stream);
	i_assert(ret > 0);
	return ret;
}